これはおそらく newb のエラーです。私は Microsoft Visual C++ Compiler Nov 2012 CTP を使用しており、これをコンパイルしようとすると:
#include <tuple>
class A
{
public:
template <class... Fs, template <class...> class T>
void foo(T<Fs...>);
};
template <class... Fs, template <class...> class T>
void A::foo(T<Fs...>)
{
}
int main()
{
A a;
a.foo(std::make_tuple(10,10));
}
次のエラーが表示されます。
error C2244: 'A::foo' : unable to match function definition to an existing declaration
definition
'void A::foo(T<Fs...>)'
existing declarations
'void A::foo(T<Fs...>)'
関数をインライン化すると、コンパイルしてやりたいことを実行しますが、関数をヘッダーファイルに配置する必要があります
ただし、次のコードはエラーなしでコンパイルされます。
#include <vector>
class A
{
public:
template <class Fs, template <class> class T>
void foo(T<Fs>);
};
template <class Fs, template <class> class T>
void A::foo(T<Fs>)
{
}
int main()
{
A a;
a.foo(std::vector<int>());
}
問題は、どうすれば可変個引数テンプレートで同じことを達成できるかということです
編集:
提案されたように、Microsoft Connect にID :771567でバグ レポートを提出しました。
また、ベクトルの例は悪いものでした (それは を与えます<std::_Simple_types<int>,std::_Vector_val>
が、コンパイルはします) が、ペアとテンプレート引数で試してみると:
template <class F, class G, template <class,class> class T>
あなたは<F,G,std::pair>
私が意味したものを得るでしょう