次のように、型リストを使用してクラスの階層を生成するために、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 個のクラスをコンパイルして構築するでしょうか?