C++ テンプレートの難問に遭遇しました。私はそれを最小限に抑えようとしましたが、今私がやろうとしていることが可能かどうかさえわかりません. 次のコード (一部の .h ファイル内) を見てください。
template<typename T>
class A
{
public:
template<typename S>
void f(S x);
};
class B1 { };
template<typename S>
class B2 { };
//This one works:
template<>
template<typename S>
void A<B1>::f(S x)
{
}
//This one does not work:
template<>
template<typename S>
void A<B2<S>>::f(S x)
{
}
私のmain
機能では、次のようなものがあります。
//This one works:
A<B1> first;
first.f<int>(5);
//This one does not work:
A<B2<int>> second;
second.f<int>(5);
2番目の部分が原因で表示されるエラーメッセージは
error C3860: template argument list following class
template name must list parameters in the
order used in template parameter list
error C3855: 'A<T>': template parameter 'T' is
incompatible with the declaration
問題は何ですか?
編集
問題をより具体的にするために、ここに私の動機があります。上記の関数に、、およびのf
特殊化を持たせたいのですが、 の型はまだバインドされていません。T=std::tuple<T1, T2>
T=std::tuple<T1, T2, T3>
T=std::tuple<T1, T2, T3, T4>
tuple