다음을 통해 공유


Windows 런타임 및 관리되는 템플릿(C++ 구성 요소 확장)

템플릿프로토타입Windows 런타임 또는공용 언어 런타임형식을 정의할 수 및 다음 해당 형식의 변형을 다른템플릿형식 매개 변수를 사용 하 여 인스턴스화할.

모든 런타임

값 또는 참조 형식에서 서식 파일을만들다수 있습니다.값 또는 참조 유형을 작성 하는 방법에 대 한 자세한 내용은 참조 하십시오. 클래스 및 구조체(C++ 구성 요소 확장).

표준 C++클래스템플릿에 대 한 자세한 내용은 클래스 템플릿.

Windows 런타임

(가지 없음이 언어기능에 대 한 설명 부분 해당적용하다Windows 공용 언어입니다.)

ms177213.collapse_all(ko-kr,VS.110).gif요구 사항

컴파일러 옵션:/ZW

공용 언어 런타임

클래스템플릿 보여 줍니다 다음코딩하다예제에서는관리형식에서 생성 하는 일부 제한이 있습니다.

ms177213.collapse_all(ko-kr,VS.110).gif요구 사항

컴파일러 옵션:/clr

ms177213.collapse_all(ko-kr,VS.110).gif예제

예제

제네릭 형식으로관리형식템플릿매개 변수를 인스턴스화할 수 있지만관리템플릿제네릭 형식템플릿매개 변수를 인스턴스화할 수 없습니다. 제네릭 형식은런타임시 해결 하기 때문입니다.자세한 내용은 제네릭 및 템플릿(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_templates_2.cpp
// compile with: /clr /c

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

예제

C + 사용 하는 참조 된어셈블리에 정의 된 서식 파일에 액세스할 수 없습니다 + 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_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> {};

참고 항목

개념

런타임 플랫폼의 구성 요소 확장