#include <iostream>
using namespace std;
template <typename>
class Test
{
void fun() { cout << "test" << endl; }
void bar() { cout << "bar"; }
};
template<>
class Test<int>
{
void fun(){}
};
template void Test<int>::fun();
我收到了一个错误:
错误:template-id&#39; fun&lt;&gt;&#39; for&#39; void Test :: fun()&#39;与任何模板声明都不匹配
但为什么?
我知道如果在Test例如
中添加模板以获得乐趣template<>
class Test<int>
{
template <typename>
void fun(){}
};
template void Test<int>::fun<bool>();
对于功能模板
template<class T> void sort(Array<T>& v) { /*...*/ } // primary template
template<> //explicit specialization of sort(Array<String>)
void sort<String>(Array<String>& v); // after implicit instantiation
template
void sort(Array<String>& v);// no matter before/after void f(Array<String>& v) , it both works
void f(Array<String>& v) {
sort(v); // implicitly instantiates sort(Array<String>&),
} // using the primary template for sort()
答案 0 :(得分:3)
显式特化(即不部分特化)不再是模板。这意味着它的所有成员都存在(就像它们被实例化一样),所以你不能(也不必)实例化它们。