다음을 통해 공유


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

제네릭 함수는 형식 매개 변수를 사용하여 선언된 함수입니다. 제네릭 함수를 호출하면 형식 매개 변수 대신 실제 형식이 사용됩니다.

모든 플랫폼

설명

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

Windows Runtime

설명

이 기능은 Windows 런타임 지원되지 않습니다.

요구 사항

해당 없음.

공용 언어 런타임

제네릭 함수는 제네릭 형식 매개 변수를 사용하여 선언된 함수입니다. 제네릭 함수를 호출하면 형식 매개 변수 대신 실제 형식이 사용됩니다.

구문

generic-declaration:
generic < generic-parameter-list >optconstraint-clause-list function-definition

generic-parameter-list:
generic-parameter
generic-parameter-list , generic-parameter

generic-parameter:
attributesopt class identifier
attributesopt typename identifier

constraint-clause-list:
constraint-clause-listopt constraint-clause

constraint-clause:
where identifier : constraint-item-list

constraint-item-list:
constraint-item
constraint-item-list , constraint-item

constraint-item:
type-id
ref class
ref struct
value class
value struct
gcnew ( )

generic-id:
generic-name < generic-argument-list >

generic-name:
identifier
operator-function-id

generic-argument-list:
generic-argument
generic-argument-list , generic-argument

generic-argument:
type-id

매개 변수

generic-parameter-list
선택적으로 특성이 지정된 제네릭 형식 매개 변수 식별자의 쉼표로 구분된 목록입니다.

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

constraint-clause-list
이 선택적 목록은 형식 인수로 사용할 수 있는 형식에 대한 제한을 지정합니다. 제네릭 형식 매개 변수(C++/CLI)의 제약 조건에 지정된 폼을 사용합니다.

function-definition
메서드 또는 독립 실행형 함수의 정의입니다. 가상 메서드가 제네릭이 아닐 virtual 수 있으므로 함수에 한정자가 없을 수 있습니다. 함수 본문은 제네릭 형식 매개 변수 식별자를 참조할 수 있습니다. 함수는 함수일 operator 수 있습니다.

generic-id
제네릭 함수의 인스턴스를 호출할 때 해당 인스턴스를 구현하는 데 사용되는 형식을 generic-argument-list지정합니다. 이 목록은 에 해당 generic-parameter-list하며 선택적 constraint-clause-list제약 조건을 충족해야 합니다.

generic-name
제네릭 함수의 identifier 이름은 함수이거나 함수일 operator 수 있습니다.

설명

제네릭 함수는 하나 이상의 제네릭 형식 매개 변수로 선언된 함수입니다. 또는 독립 실행형 함수의 class struct메서드일 수 있습니다. 단일 제네릭 선언에서 제네릭 형식 매개 변수를 대체하는 실제 형식만 다른 함수 제품군을 암시적으로 선언합니다.

제네릭 형식 매개 변수를 사용하여 A class 또는 struct 생성자를 선언할 수 없습니다.

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

요구 사항

컴파일러 옵션: /clr

예제

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

// 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);
}

제네릭 함수는 함수의 형식 매개 변수 수인 서명 또는 arity에 따라 오버로드할 수 있습니다. 함수의 일부 형식 매개 변수가 다르기만 하면, 동일한 이름의 제네릭이 아닌 함수를 사용하여 제네릭 함수를 오버로드할 수도 있습니다. 예를 들어 다음 함수를 오버로드할 수 있습니다.

// 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) {}
};

다음 예제에서는 제네릭 함수를 사용하여 배열의 첫 번째 요소를 찾습니다. 기본 클래스 MyBaseClass에서 상속받는 MyClass를 선언합니다. MyClass에 포함된 제네릭 함수 MyFunction은 기본 클래스 내에서 다른 제네릭 함수 MyBaseClassFunction을 호출합니다. main에서 다양한 형식 인수를 사용하여 제네릭 함수 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!"));
}
My function returned an int: 2003
My function returned a string: Hello generic functions!

참고 항목

.NET 및 UWP용 구성 요소 확장
제네릭