可能重复:
Template partial specialization with multiple template argument error
是否可以将e模板类专门化为功能级别?
我会举例说明我想要实现的内容,但是我遇到了编译错误:
template<typename T1, typename T2>
class C
{
public:
void f();
};
template<typename T1, typename T2>
void C<T1, T2>::f()
{
}
template<typename T1, int>
void C<T1, int>::f()
{
}
错误:
template argument list following class template name must list parameters in the order used in template parameter list
'void C<T1,T2>::f(void)' : function template has already been defined
'C<T1,T2>': template parameter 'T2' is incompatible with the declaration
答案 0 :(得分:1)
如果您想使C::f
的行为依赖于T2
,您可以尝试将其实现放入一个单独的类中,如下所示:
template <typename T>
class C_aux
{
public:
void f() {}
};
template <>
class C_aux<int>
{
void f() {}
};
template <typename T1, typename T2>
class C
{
public:
void f();
};
template <typename T1, typename T2>
void C<T1, T2>::f()
{
C_aux<T2>::f();
}
根据您的需求细节C_aux::f
必须采取额外参数。或者,您可以让class C
继承class C_aux
,反之亦然。