哪种方式更适合定义类型特征或行为

Which way is better to define type traits or behavior?

本文关键字:特征 类型 定义 方式更      更新时间:2023-10-16
有两种

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

一种是在类内部定义

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"反模式):

  1. 它更有效,因为每当访问一个嵌套类型时,类实例化不会导致对其他未使用的嵌套类型进行大量不必要的解析
  2. 当具有单个"返回类型"时,更容易组合元函数