我在 C++ 中使用模板元编程来使用类型列表生成类的层次结构,如下所示:

//! Basic typelist class
template<class H, class T>
class Typelist
{
public:
    typedef H Head;
    typedef T Tail;
};

//! Terminating type
class NullType {};

//! Forward declaration
template<class Types>
class Recur;

//! Specialisation to terminate the recursion
template<>
class Recur<NullType>
{
};

//! General recursive class
template<class Types>
class Recur: public Recur<typename Types::Tail>
{
};

// Dummy classes
class Type1{};
class Type2{};
class Type3{};
int main()
{
    // Defines the typelist
    typedef Typelist<Type1,Typelist<Type2,Typelist<Type3,NullType>>> Types;

    // Instantiate the recursion
    Recur<Types> recur;
    return 1;
}

这将产生一个类层次结构,如下所示:
Recur<Typelist<Type2,Typelist<Type3,NullType>>> 源自:Recur<Typelist<Type3,NullType>> 源自:
Recur<NullType> (base class)

问题:Visual Studio 2010 编译器对使用这种递归技术的类派生深度有任何限制吗?换句话说,如果我的类型列表包含 N 个类型,即使 N 等于 100,000,上面的代码也会编译和构造 N 个类吗?

最佳答案

Standard 的附件 B 仅指定了直接和间接基类以及嵌套模板实例的最低级别,并且特定编译器是否超出此级别是实现质量问题。请查阅您的特定编译器自己的文档以获取 precies 数字。以下是标准要求的最低数量。
附件 B(资料性)
实现量 [implimits]

关于c++ - 元编程继承限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14603752/

10-13 08:31