专门课程的专业功能

时间:2013-06-09 13:10:37

标签: c++ templates

有人可以解释一下,为什么这不是编译...专门课程的专业功能??? 在模板化类的专用版本中,专用函数不编译。

        #include<iostream>
        using namespace std;

    //Default template class
        template<typename T>
        class X
        {
        public:
            void func(T t) const;
        };


        template<typename T>
        void X<T>::func(T b) const
        {
            cout << endl << "Default Version" << endl;
        }


//Specialized version        
        template<>
        class X<int>
        {
            public:
            void func(int y) const;
        };

        template<>
        void X<int>::func(int y)
        {
            cout << endl << "Int Version" << endl;
        }

        int main()
        {
            return 0;
        }

2 个答案:

答案 0 :(得分:3)

类模板的显式特化是一个具体的类,而不是模板,所以你可以(或者更应该)只写:

// template<>
// ^^^^^^^^^^
// You should not write this

void X<int>::func(int y) const
//                       ^^^^^
//                       And do not forget this!
{
    cout << endl << "Int Version" << endl;
}

因此遗漏了template<>部分。

另外,请注意您的func()函数const - 在声明中是合格的 - 因此即使在定义中也必须使用const限定符。

这是live example

答案 1 :(得分:1)

我认为你没有使用尾随的const修饰符