0

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

一种是在类内部定义

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>() { ... }

哪种方式更好,为什么> 或者还有其他更好的方式吗?

4

1 回答 1

1

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

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

  1. 它更高效,因为每当访问一个嵌套类型时,类实例化不会导致对其他未使用的嵌套类型进行大量不必要的解析
  2. 具有单一“返回类型”时更容易组合元函数
于 2013-10-14T19:34:37.800 回答