2016-03-31 5 views
7

Foo1<T>Foo2<T>という2つのクラスがあるとします。悲しいことにテンプレートテンプレートパラメータを宣言する方法

template<class T, class Y> std::vector<Foo1<T>> bar(std::vector<Y<T>>&)

コンパイラは<Y<T>>が好きではありません。

私は、常にstd::vector<Foo1<T>>またはstd::vector<Foo2<T>>への参照を取る関数barを作成したいが、std::vector<Foo1<T>>を返します。ビット。これを1つの方法は、2つのオーバーロードを提供することですが、それは正しいので、私は上記を整理する方法はありますか?

答えて

17

あなたはtemplate template parameterが必要です

template<class T, template <typename> class Y> 
std::vector<Foo1<T>> bar(std::vector<Y<T>>&) {} 
+0

ありがとうございました。あなたは天使だ! –

+2

C++で始める14 'Y'は' class'ではなく 'typename'でも宣言できます。 'T'パラメータは常に宣言することができます。言語に少しだけ統語的な一貫性が追加されています。 – emsr

+0

@emsr 'class'を' template'の中で排他的に使うのが好きです。単に 'typename T :: type'の検索を簡単にするためです。 – TemplateRex

関連する問題