それ自体がテンプレートであるテンプレートパラメータのすべてのケースをキャッチするテンプレートテンプレートを使用できますか?C++でのテンプレートテンプレートのバリデーション
テンプレートベースのメソッドでは、テンプレートを使用してデバッグ出力を生成しています。まず、私は、ネイティブなタイプのためにそれを専門に、その後、一般的なハンドラを作成しました:
template<typename... PARAMS> struct TypeList{};
template<typename TYPE> inline void ntype(ostream &out, TypeList<TYPE>) {
out << typeid(TYPE).name();
}
template<> inline void ntype(ostream &out, TypeList<int>) {
out << "int";
}
...
は、それから私は、渡されたテンプレートの種類をキャッチするために、第2のテンプレート形式を追加しようとしました:
サブタイプがテンプレートであるtemplate<typename ... SUB, template<typename...> class TYPE> void ntype(ostream &out, TypeList<TYPE<SUB...> >) {
ntype(out, TypeList<typename TYPE>());
out << '<';
subtype(out, TypeList<SUB...>());
out << '>';
}
メソッドをntype()に順番に適用し、paramリストを再帰的に処理するように設計されています。コンパイルエラーが、それはテンプレートテンプレートのバージョンと一致することはありません - それは唯一のこれまでの一般的な最初のテンプレート関数に一致する
ntype<SomeClass<int> >(out, TypeList<SomeClass<int> >());
:私はの効果に何かでこれを呼び出すしようとすると
問題があります。私は確かに自分の理解が不足していると確信していますが、Googleの結果はテンプレートテンプレートの例を明確にするためには非常に薄いと思われます。
誰でも私が試みていることが可能であるかどうかを説明することができますか、もしそうなら、私は間違っていますか?
うわー!それは見出しとコードを数えない、 "テンプレート"という言葉の14のインスタンスです! –
私の脳は爆発しました。私はあなたを責めます。 –
テストするのに私が使っているコードがあるはずです:-P – jka6510