共用方式為


類別樣板的明確特製化

類別樣板可以針對特定類型或樣板引數的值進行特製化。 特製化可針對特定的引數類型或自訂值自訂樣板程式碼。 若未進行特製化,則會為樣板具現化中使用的每個類型產生相同的程式碼。 若在進行特製化時使了特定的類型,則會使用特製化的定義,而不是原始的樣板定義。 特製化與特製化的樣板具有相同的名稱。 不過,樣板特製化在許多方面與原始的樣板不同。 例如,它可能有不同的資料成員和成員函式。

使用特製化針對特定類型或值自訂樣板。 當範本具有一個以上的樣板引數,而且您只需要特製化其中一個樣板引數時,或者,當您想要特製化整組類型的行為,例如所有指標類型、參考類型或陣列類型時,可使用部分特製化。 如需詳細資訊,請參閱類別樣板的部分特製化

範例

// 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(&i);

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

    formatter1.print(); // 157
    formatter2.print(); // Char value : s
}
  

請參閱

參考

類別樣板具現化

類別樣板的部分特製化 (C++)