C++中为模板类创建别名的最优方法是什么?
如何给模板类实例创建简便别名?
你完全没必要用继承这种绕远路的方式!C++早就提供了直接的别名机制,完美解决你不想反复写Dummy1<int>的需求,下面给你讲两种最常用的方法:
1. C++11及以后首选:using别名声明
using是C++11引入的更清晰灵活的别名语法,处理模板实例特别顺手:
// 你的原始模板类 template<typename T> class Dummy1 { public: Dummy1(T var) : myVar1(var) { } ~Dummy1() { } private: T myVar1; }; // 直接为Dummy1<int>创建别名 using DummyInt = Dummy1<int>;
之后你就可以在代码里全程用DummyInt替代Dummy1<int>,不管是变量、指针还是引用都能用:
// 声明变量 DummyInt obj(42); // 声明指针 DummyInt* ptr = &obj; // 声明引用 DummyInt& ref = obj;
2. 兼容旧标准:typedef别名
你之前写的typedef Dummy1<int> DummyInt;其实是标准的C写法(不是什么"C风格",C语言根本不支持模板),在C98/03里这是唯一的别名方式,放到现在也完全能用:
typedef Dummy1<int> DummyInt; // 使用起来和using完全一样 DummyInt obj(100);
为什么继承是没必要的?
你之前用继承的方式会带来额外的麻烦:
- 必须手动编写构造函数(哪怕C++11支持构造函数继承,也需要额外声明,完全没必要)
- 平白多了一层类继承关系,增加了代码复杂度,但你的需求只是"给现有模板实例起个短名字",根本不需要扩展类功能
- 别名是编译期的语法糖,不会产生任何运行时开销;而继承本质是创建了一个新类,哪怕编译器会优化,也属于过度设计
总之,直接用using或typedef创建别名是最简便、最高效的方案,完全满足你避免重复写模板形式的需求。
内容的提问来源于stack exchange,提问作者user7747610
相关产品推荐
相关产品推荐

