有两种方法可以在模板编程中定义类型特征或行为。
一个是在课堂内定义
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>() { ... }
哪种方式更好,为什么&gt;或者还有其他更好的方法吗?
答案 0 :(得分:1)
对于“常规”模板编程,最好结合定义域抽象所需的任何内容。最好使用常规类使用的设计原则(SOLID等)。但是,对于模板类,您通常还会尝试在非模板基类中分解出与模板无关的代码(以避免代码膨胀)。
对于元编程目的,Boost.MPL库每个类专门使用一个嵌套类型有两个原因(它们甚至可以将每个特征调用多个类型称为“blob”反模式):