Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 专门化后的显式实例化 #包括 使用名称空间std; 模板 课堂测试 { void fun(){cout_C++_Templates_Instantiation - Fatal编程技术网

C++ 专门化后的显式实例化 #包括 使用名称空间std; 模板 课堂测试 { void fun(){cout

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

显式专业化(即,不是部分专业化)不再是模板。这意味着它的所有成员都确实存在(就像它们被实例化一样),因此您无法(也不需要)实例化它们。

它似乎是显式的(完整的)类template的专门化如果只有显式专门化,而不是在.o中生成符号,但显式实例化将生成符号。因此,我不能同意“它的所有成员都确实存在(就像它们被实例化一样)”
#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()