2

例如:

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<1>::Fun()

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

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

4

1 回答 1

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. */
}
于 2013-07-06T14:05:50.867 回答