C++ 专门化后的显式实例化 #包括 使用名称空间std; 模板 课堂测试 { void fun(){cout
显式专业化(即,不是部分专业化)不再是模板。这意味着它的所有成员都确实存在(就像它们被实例化一样),因此您无法(也不需要)实例化它们。它似乎是显式的(完整的)类template的专门化如果只有显式专门化,而不是在.o中生成符号,但显式实例化将生成符号。因此,我不能同意“它的所有成员都确实存在(就像它们被实例化一样)”C++ 专门化后的显式实例化 #包括 使用名称空间std; 模板 课堂测试 { void fun(){cout,c++,templates,instantiation,C++,Templates,Instantiation,显式专业化(即,不是部分专业化)不再是模板。这意味着它的所有成员都确实存在(就像它们被实例化一样),因此您无法(也不需要)实例化它们。它似乎是显式的(完整的)类template的专门化如果只有显式专门化,而不是在.o中生成符号,但显式实例化将生成符号。因此,我不能同意“它的所有成员都确实存在(就像它们被实例化一样)” #include <iostream> using namespace std; template <typename> class Test {
#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<>
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()