功能级别的部分模板类专业化

时间:2012-12-13 19:26:26

标签: c++ templates

  

可能重复:
  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

1 个答案:

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