选件类模板的显式专用化

类模板可用于模板参数的特定类型或值专用。 专用化允许模板代码为特定参数类型或值的自定义。 没有专用化,同一代码提供用于模板实例化的每个类型生成。 在专用化,在使用时,具体类型,专用化的定义使用而不是原模板定义。 专用化与它是专用化的模板相同。 但是,模板专用化在许多方面可以与原始模板不同。 例如,它可能具有不同的数据成员和成员函数。

使用专用化自定义特定类型或值的模板。 请使用部分专用化,当模板上时多个模板参数和只需要专用其中的一个,或者,如果希望整个专用的行为设置类型,如所有指针类型时,引用类型或数组类型。 有关更多信息,请参见 类模板的部分专用化

示例

// explicit_specialization1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

// Template class declaration and definition
template <class T> class Formatter
{
   T* m_t;
public:
   Formatter(T* t) : m_t(t) { }
   void print()
   {
      cout << *m_t << endl;
   }
};

// Specialization of template class for type char*
template<> class Formatter<char*>
{
   char** m_t;
public:
   Formatter(char** t) : m_t(t) { }
   void print()
   {
      cout << "Char value: " << **m_t << endl;
   }
};

int main()
{
   int i = 157;
   // Use the generic template with int as the argument.
   Formatter<int>* formatter1 = new Formatter<int>(&i);

   char str[10] = "string1";
   char* str1 = str;
   // Use the specialized template.
   Formatter<char*>* formatter2 = new Formatter<char*>(&str1);

   formatter1->print();
   formatter2->print();
}
  

请参见

参考

选件类模板实例化

选件类模板(C++)的部分专用化