如何在模板类中专门化模板成员函数(已经specilzied)?

时间:2013-07-06 14:04:12

标签: c++ templates specialization

例如:

template<unsigned number>
struct A
{
    template<class T>
    static void Fun()
    {}
};

template<>
struct A<1>
{
    template<class T>
    static void Fun()
    {
       /* some code here. */
    }
};

想要专门化A&lt; 1&gt; :: Fun()

template<>
template<>
void A<1>::Fun<int>()
{
    /* some code here. */
}

似乎不起作用。怎么做?感谢。

1 个答案:

答案 0 :(得分:2)

类模板的显式特化类似于常规类(它是完全实例化的,因此它不是参数类型)。因此,您不需要外部template<>

// template<> <== NOT NEEDED: A<1> is just like a regular class
template<> // <== NEEDED to explicitly specialize member function template Fun()
void A<1>::Fun<int>()
{
    /* some code here. */
}

同样,如果您的成员函数Fun不是函数模板,而是常规成员函数,则根本不需要任何template<>

template<>
struct A<1>
{
    void Fun();
};

void A<1>::Fun()
{
    /* some code here. */
}