2

可能重复:
具有多个模板参数错误的模板部分特化

是否可以将模板类专门化为功能级别?

我会给你和我想要实现的例子,但我得到编译错误:

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
4

1 回答 1

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,反之亦然。

于 2012-12-13T20:25:06.477 回答