如何为特定类型的模板命名一个简写
How do you name a shorthand for a template of a specific type?
假设我经常使用模板类型为int
的模板类Foo
:
Foo<int> number;
Foo<int> location;
...
我知道有一种方法可以通过为这个特定的模板类型定义一个名称来使它更漂亮,这样我就可以有类似的(但更漂亮的)代码,如:
FooInt number;
FooInt location;
...
我相信这可以用编译器指令#define
来完成,但我不确定具体细节。或者,是否有一种方法来实现一个被定义为Foo<int>
的新类FooInt
?
当所有参数都固定时,您可以使用常规的typedef
为模板类型创建别名:
typedef Foo<int> FooInt;
你所需要的只是一个别名:
using FooInt = Foo<int>;
除了前面提到的两个版本,我建议您使用Foo<int>
。它是自我记录的。其他人必须理解它,如果你以后(比方说2年)看你自己的代码,你也必须理解它。在这些情况下,Foo<int>
比其他选项更好。
typedef
是答案,但作为信息的补充…
或者,是否有一种方法来实现一个新的类FooInt定义为Int的Foo ?
是的,只需如下声明你的特化类:
class FooInt : public Foo<int> {
}
注意:我注意到这是一个好方法,但只是这是可行的。
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 更改可变参数模板中的最后一个类型
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- 有没有办法同时将一个类型分配给C++中的多个模板?
- C++:可以模板化一个类型名称吗
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 期望一个类型,得到一个模板
- 初始化一个类型向量的巨大向量<int>
- 我可以使用预处理器将一个类型声明替换为另一个类型声明吗?
- 具有多种类型的类数组?如何访问数组中的一个类型
- Opencv C++ 声明一个类型为 uint8 的矩阵
- 模板参数列表中只有一个类型名称是什么意思?
- C++模板部分特化:为什么我无法匹配可变参数模板中的最后一个类型
- 为什么我们有一个类型不匹配
- 在函数模板中将一个类型名映射到另一个类型名
- 创建一个类型bool的向量,其中所有值均可初始化为true
- 在C API中定义了一个类型,如何将其与命名空间中的C++类相关联