哪种方式更好地定义类型特征或行为?

时间:2013-10-14 18:52:16

标签: c++ templates traits

有两种方法可以在模板编程中定义类型特征或行为。

一个是在课堂内定义

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;或者还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:1)

对于“常规”模板编程,最好结合定义域抽象所需的任何内容。最好使用常规类使用的设计原则(SOLID等)。但是,对于模板类,您通常还会尝试在非模板基类中分解出与模板无关的代码(以避免代码膨胀)。

对于元编程目的,Boost.MPL库每个类专门使用一个嵌套类型有两个原因(它们甚至可以将每个特征调用多个类型称为“blob”反模式):

  1. 效率更高,因为无论何时访问一个嵌套类型,类实例化都不会导致对其他未使用的嵌套类型进行大量不必要的解析
  2. 当有一个“返回类型”
  3. 时,组合元函数会更容易