다음을 통해 공유


제네릭 함수(C++/CLI)

함수가 제네릭 형식 매개 변수가 선언 된 함수가입니다.호출 하는 경우 실제 형식은 형식 매개 변수 대신 사용 됩니다.

모든 플랫폼

설명

이 기능은 모든 플랫폼에 적용 되지 않습니다.

Windows 런타임

설명

이 기능을 지원 하지 않습니다는 Windows 런타임.

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

컴파일러 옵션:/ZW

공용 언어 런타임

함수가 제네릭 형식 매개 변수가 선언 된 함수가입니다.호출 하는 경우 실제 형식은 형식 매개 변수 대신 사용 됩니다.

구문

[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]

([formal-parameters])
{
   function-body
}

매개 변수

  • 특성 (선택 사항)
    추가 선언 정보입니다.특성 및 특성 클래스에 대 한 자세한 내용은 특성을 참조 하십시오.

  • 한정자 (선택 사항)
    St 등의 함수에 대 한 한정자atic. virtual가상 메서드를 제네릭 될 수 있기 때문에 허용 되지 않습니다.

  • 반환 형식
    메서드에서 반환하는 형식입니다.반환 값이 없는 반환 형식이 void 인 경우입니다.

  • identifier
    함수 이름

  • 형식 매개 변수 식별자
    쉼표로 구분 된 식별자 목록입니다.

  • 형식 매개 변수 (선택 사항)
    매개 변수 목록입니다.

  • 형식 매개 변수의 제약 조건 절
    이 제한 형식 인수로 사용할 수 있는 형식에 지정 하며 지정 된 제네릭 형식 매개 변수에 대한 제약 조건(C++/CLI).

  • 함수 본문
    본문 메서드의 형식 매개 변수 식별자를 참조할 수도 있습니다.

설명

제네릭 함수는 제네릭 형식 매개 변수로 선언 하는 함수입니다.이러한 메서드를 클래스 또는 구조체 또는 독립 실행형 함수를 수 있습니다.단일 제네릭 선언 패밀리의 다른 실제 형식의 제네릭 형식 매개 변수에 대 한 대체만 다른 함수를 암시적으로 선언 합니다.

Visual C++, 제네릭 형식 매개 변수가 있는 클래스 또는 구조체의 생성자를 선언할 수 없습니다.

호출 하는 경우 제네릭 형식 매개 변수가 실제 형식으로 대체 됩니다.실제 형식에 꺾쇠 괄호는 템플릿 함수 호출과 유사한 구문을 사용 하 여 명시적으로 지정할 수 있습니다.유형 매개 변수 없이 호출 되 면 컴파일러에서 함수 호출에 제공 된 매개 변수가 실제 형식 추론 하려고 시도 합니다.사용 된 매개 변수에서 의도 된 형식 인수를 추론할 수 없으면 컴파일러에서 오류를 보고 합니다.

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

컴파일러 옵션:/clr

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

예제

다음 코드 예제에서는 제네릭 함수를 보여 줍니다.

// generics_generic_function_1.cpp
// compile with: /clr
generic <typename ItemType>
void G(int i) {}

ref struct A {
   generic <typename ItemType>
   void G(ItemType) {}

   generic <typename ItemType>
   static void H(int i) {}
};

int main() {
   A myObject;

   // generic function call
   myObject.G<int>(10);

   // generic function call with type parameters deduced
   myObject.G(10);

   // static generic function call
   A::H<int>(10);

   // global generic function call
   G<int>(10);
}

예제

서명 또는 인자, 함수에서 형식 매개 변수의 수에 따라 제네릭 함수를 오버 로드할 수 있습니다.또한 일부 형식 매개 변수를 함수를 다르게 제네릭 함수 이름이 같은 제네릭이 아닌 함수를 오버 로드할 수 있습니다.예를 들어, 다음 함수 오버 로드할 수 있습니다.

// generics_generic_function_2.cpp
// compile with: /clr /c
ref struct MyClass {
   void MyMythod(int i) {}

   generic <class T> 
   void MyMythod(int i) {}

   generic <class T, class V> 
   void MyMythod(int i) {}
};

예제

다음 예제에서는 배열에서 첫 번째 요소를 찾는 제네릭 함수를 사용 합니다.선언한 MyClass, 기본 클래스에서 상속 되는 MyBaseClass.MyClass제네릭 함수를 포함 MyFunction, 다른 제네릭 함수를 호출 하는 MyBaseClassFunction, 내 기본 클래스입니다., 일반 함수, MyFunction, 다른 형식 인수를 사용 하 여 호출 됩니다.

// generics_generic_function_3.cpp
// compile with: /clr
using namespace System;

ref class MyBaseClass {
protected:
   generic <class ItemType>
   ItemType MyBaseClassFunction(ItemType item) {
      return item;
   }
};

ref class MyClass: public MyBaseClass {
public:
   generic <class ItemType>
   ItemType MyFunction(ItemType item) {
      return MyBaseClass::MyBaseClassFunction<ItemType>(item);
   }
};

int main() {
   MyClass^ myObj = gcnew MyClass();

   // Call MyFunction using an int.
   Console::WriteLine("My function returned an int: {0}",
                           myObj->MyFunction<int>(2003));

   // Call MyFunction using a string.
   Console::WriteLine("My function returned a string: {0}",
   myObj->MyFunction<String^>("Hello generic functions!"));
}

Output

  
  

참고 항목

개념

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

기타 리소스

제네릭(C++ 구성 요소 확장)