【发布时间】:2013-01-30 12:13:34
【问题描述】:
我在 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 个类吗?
【问题讨论】:
-
最好不要依赖这样的具体实现细节
标签: c++ visual-studio-2010 stl metaprogramming instantiation