Windows 執行階段和 Managed 樣板 (C++ 元件擴充功能)

範本可讓您定義原型Windows 執行階段或Common Language Runtime型別,然後使用不同的範本型別參數,以執行個體化該型別的變數。

所有的執行階段

您可以建立的範本,從數值或參考型別。如需有關如何建立數值或參考類型的詳細資訊,請參閱類別和結構 (C++ 元件擴充功能)

如需有關標準的 C++類別樣板的詳細資訊,請參閱類別樣板

Windows 執行階段

(沒有註解,此功能上的 [語言],套用到 Windows 執行階段)。

ms177213.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/ZW

Common Language Runtime

若要從Managed的類型,在下列程式碼範例會示範建立類別樣板中有一些限制。

ms177213.collapse_all(zh-tw,VS.110).gif需求

編譯器選項:/clr

ms177213.collapse_all(zh-tw,VS.110).gif範例

範例

可以具現化泛型型別,並Managed型別範本參數,但您不能具現化Managed範本,內含泛型型別範本參數。這是因為泛型型別是在執行階段解析。如需詳細資訊,請參閱 泛型和樣板 (Visual C++)

// managed_templates.cpp
// compile with: /clr /c

generic<class T> 
ref class R; 

template<class T> 
ref class Z {
   // Instantiate a generic with a template parameter.
   R<T>^ r;    // OK
};

generic<class T> 
ref class R {
   // Cannot instantiate a template with a generic parameter.
   Z<T>^ z;   // C3231
};

範例

泛型型別或函式不能是巢狀Managed範本中。

// managed_templates_2.cpp
// compile with: /clr /c

template<class T> public ref class R {
   generic<class T> ref class W {};   // C2959
};

範例

您無法存取範本定義在參考組譯碼使用 C + + /cli CLI 語言語法,但您可以使用反映。如果範本不具現化,它不會發出中繼資料中。如果範本執行個體化時,只能參考的成員函式會出現在中繼資料中。

// managed_templates_3.cpp
// compile with: /clr

// Will not appear in metadata.
template<class T> public ref class A {};

// Will appear in metadata as a specialized type.
template<class T> public ref class R {
public:
   // Test is referenced, will appear in metadata
   void Test() {}

   // Test2 is not referenced, will not appear in metadata
   void Test2() {}
};

// Will appear in metadata.
generic<class T> public ref class G { };

public ref class S { };

int main() {
   R<int>^ r = gcnew R<int>;
   r->Test();
}

範例

您可以變更Managed的修飾詞中的部份特製化或在類別範本的明確特製化的類別。

// managed_templates_4.cpp
// compile with: /clr /c

// class template
// ref class
template <class T>
ref class A {};

// partial template specialization
// value type
template <class T>
value class A <T *> {};

// partial template specialization
// interface
template <class T> 
interface class A<T%> {};

// explicit template specialization
// native class
template <>
class A <int> {};

請參閱

概念

執行階段平台的元件擴充功能