共用方式為


成員函式樣板

詞彙成員範本指的是成員函式樣板和巢狀的類別樣板。 成員函式樣板的樣板函式成員的類別或類別樣板。 如需詳細資訊,請參閱巢狀類別樣板

成員函式可以是幾種內容中的函式樣板。 類別樣板的所有函數都是泛型,但不是稱為成員樣板或成員函式樣板。 如果這些成員函式會使用自己的樣板引數,將它們視為是成員函式樣板。 如需詳細資訊,請參閱的樣板類別成員函式

範例

非樣板或樣板類別的成員函式樣板宣告為具有其樣板參數的函式樣板。

// member_function_templates.cpp
struct X
{
   template <class T> void mf(T* t) {}
};

int main()
{
   int i;
   X* x = new X();
   x->mf(&i);
}

下列範例會顯示成員函式樣板或樣板類別。

// member_function_templates2.cpp
template<typename T>
class X
{
public:
   template<typename U>
   void mf(const U &u)
   {
   }
};

int main()
{
}

此外,在 Visual Studio。NET 2003 和更新版本,也可以類別之外定義樣板的成員。

// defining_member_templates_outside_class.cpp
template<typename T>
class X
{
public:
   template<typename U>
   void mf(const U &u);
};

template<typename T> template <typename U>
void X<T>::mf(const U &u)
{
}

int main()
{
}

不允許本機的類別可以有成員樣板。

成員樣板函式不可以是虛擬函式,以及宣告具有相同的名稱,做為基底類別虛擬函式時,無法覆寫自基底類別虛擬函式。

Visual C++。NET 2003 引進了支援樣板化的使用者定義轉換。 下列範例適用於 Visual C++。NET 2003 中所指定的標準。

// templated_user_defined_conversions.cpp
template <class T>
struct S
{
   template <class U> operator S<U>()
   {
      return S<U>();
   }
};

int main()
{
   S<int> s1;
   S<long> s2 = s1;  // Convert s1 using UDC and copy constructs S<long>.
}

請參閱

參考

函式樣板