C++テンプレートで有効なテンプレート構造体ですか?関数のテンプレートテンプレートパラメータ
template < template <typename T2> class T>
void foo() {
}
C++テンプレートで有効なテンプレート構造体ですか?関数のテンプレートテンプレートパラメータ
template < template <typename T2> class T>
void foo() {
}
はい。それは有効です。
あなたは正確 1つのテンプレートパラメータをとる任意のクラステンプレートでこの関数を呼び出すことができます。あなたのコードでは、
foo< A<int> >(); //error
また:たとえば、あなたが持っていない
template<typename T>
struct A
{
//...
};
foo<A>(); //ok
注A
クラステンプレート、意味し、以下はコンパイルエラーになりためのテンプレート引数を提供するためにT2
はオプションであり、実際には、あなたはとても良く定義を簡単にするため、それを削除し、機能でそれを使用することはできません。
template < template <typename> class T>
void foo() {
T<int> x; //this is how T can be instantiated; provide template argument!
}
この場合、「T2」と同様に、常にオプションですか?私はクラステンプレートでもそれを使うことができませんでした。 http://ideone.com/LEt6N – user103214
@ user974191:はい。決して必要はありません。テンプレート定義では使用できません! – Nawaz
@ChrisLutz、私は 'T2'はオプションだと思います。 – iammilind
@ChrisLutz:そうは思いません。 http://ideone.com/8jlI5 – Nawaz
@Nawaz - 私はどこかでそれを読んで覚えています。私は今日、いたるところで間違っているようです。私の悪い。 –