哪种方式更适合定义类型特征或行为
Which way is better to define type traits or behavior?
有两种
方法可以在模板编程中定义类型特征或行为。
一种是在类内部定义
class MyClass
{
public:
typedef ... DialogType;
static string type() {...}
...
};
另一个是在类外部定义的
class MyClass {...};
template<class T> struct Dialog;
template<> struct Dialog<MyClass> { typedef ... Type;}
template<class T> string type();
template<> string type<MyClass>() { ... }
哪种方式更好,为什么> 或者还有其他更好的方法吗?
对于"常规"模板编程,最好组合定义域抽象所需的任何内容。这最好使用与常规类一起使用的设计原则(SOLID 等)来完成。但是,对于模板类,您通常还会尝试在非模板基类中分解出与模板无关的代码(以避免代码膨胀)。
出于元编程目的,Boost.MPL 库专门为每个类使用一个嵌套类型,原因有两个(他们甚至将每个特征的多个类型称为"blob"反模式):
- 它更有效,因为每当访问一个嵌套类型时,类实例化不会导致对其他未使用的嵌套类型进行大量不必要的解析
- 当具有单个"返回类型"时,更容易组合元函数
相关文章:
- 如何将高维数据映射到特征类型?
- 将平面阵列重塑为复杂的特征类型
- 以特征类型作为参数的泛型函数回调
- 如何通过opencv中的程序参数定义特征类型?
- 在编译时检查特征类型保存的数据在内存中是否连续
- 专门针对特征类型的功能
- 具有特征类型输出的特征二进制 Expr
- 使用具有STL容器和STD :: vector的特征类型
- 从指针进行特征3类型的强制转换/复制(溢出uint8_t)
- 使用 python 扩展在 gdb 中打印特征类型时出现问题
- 将特征类型与 boost::bind 一起使用是否会自动违反 Eigen 的"only pass by reference"规则?
- NVIDIA NVCC 在使用模板特征类型时更改编译时间常量
- 固定大小的特征类型作为参数
- 特征类型类型定义失败,并显示 C4430
- 检查类型是否为特征 3 类型
- 传递std::迭代器,指向具有特征类型的向量
- visual studio 2012中对特征类型向量的自动矢量化表现不佳
- 子类特征类型
- 使用一个特征类型内提升图
- 特征c++类型转换