我在 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/