2011-10-16 3 views
11

C++テンプレートで有効なテンプレート構造体ですか?関数のテンプレートテンプレートパラメータ

template < template <typename T2> class T> 
void foo() { 

} 
+3

@ChrisLutz、私は 'T2'はオプションだと思います。 – iammilind

+0

@ChrisLutz:そうは思いません。 http://ideone.com/8jlI5 – Nawaz

+0

@Nawaz - 私はどこかでそれを読んで覚えています。私は今日、いたるところで間違っているようです。私の悪い。 –

答えて

13

はい。それは有効です。

あなたは正確 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! 
} 

デモ:http://ideone.com/8jlI5

+0

この場合、「T2」と同様に、常にオプションですか?私はクラステンプレートでもそれを使うことができませんでした。 http://ideone.com/LEt6N – user103214

+0

@ user974191:はい。決して必要はありません。テンプレート定義では使用できません! – Nawaz

関連する問題