제네릭 함수(C++/CLI)
제네릭 함수는 형식 매개 변수로 선언된 함수입니다. 호출 하면 실제 형식은 형식 매개 변수 대신 사용됩니다.
모든 플랫폼
설명
이 기능은 모든 플랫폼에 적용되지 않습니다.
Windows 런타임
설명
이 기능은 Windows 런타임에서 지원되지 않습니다.
요구 사항
컴파일러 옵션: /ZW
공용 언어 런타임
제네릭 함수는 형식 매개 변수로 선언된 함수입니다. 호출 하면 실제 형식은 형식 매개 변수 대신 사용됩니다.
구문
[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]
([formal-parameters])
{
function-body
}
매개 변수
attributes(옵션)
추가 선언 정보입니다. 특성 및 특성 클래스에 대한 자세한 내용은 특성을 참조하십시오.modifiers (선택적 요소)
Static. virtual와 같은 함수 한정자는 가상 메서드를 제네릭 될 수 있으므로 허용 되지 않습니다.return-type
메서드에서 반환하는 형식입니다. 반환 형식이 void 인 경우 반환 값은 필요하지 않습니다.identifier
함수 이름type-parameter identifier(s)
쉼표로 구분된 식별자 목록입니다.formal-parameters(옵션)
매개 변수 목록type-parameter-constraints-clauses
이 유형의 인수에 사용 가능한 유형에 대한 제한을 지정하고, 제네릭 형식 매개 변수에 대한 제약 조건(C++/CLI)에 지정된 형태를 취합니다.function-body
본문 메서드 형식 매개 변수 식별자를 참조할 수도 있습니다.
설명
제네릭 함수는 제네릭 형식 매개 변수가 선언된 함수입니다. 클래스 또는 구조체 또는 독립 실행형 함수에서 메서드가 될 수 있습니다. 단일 제네릭 선언은 대체적으로 제네릭 형식 매개 변수에 대한 실제 다른 종류의 다른 함수를 암시적으로 선언합니다.
에서, 클래스 나 구조체 생성자는 제네릭 형식 매개 변수로 선언 할 수 없습니다.
호출될 때, 제네릭 형식 매개 변수는 실제 형식으로 대체됩니다. 템플릿 함수 호출 구문을 사용하여 꺾쇠 괄호에 실제 형식은 명시적으로 지정할 수 있습니다. 형식 매개 변수없이 호출하면 컴파일러는 함수 호출에 제공된 매개 변수의 실제 유형을 추론하려고 시도합니다. 제네릭 함수를 호출하는 경우 사용된 매개 변수에서 의도된 형식 인수를 추론할 수 없으면 컴파일러에서 오류를 보고합니다.
요구 사항
컴파일러 옵션: /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);
}
예제
서명 또는 인자, 함수에 대한 형식 매개 변수의 수에 따라 제네릭 함수를 오버 로드할 수 있습니다. 또한 일부 형식 매개 변수에서 다른 기능으로 제네릭 함수 이름이 같은 제네릭이 아닌 함수를 오버 로드할 수 있습니다. 예를 들어, 이제 다음과 같은 함수가 오버로드될 수 있습니다:
// 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는 기본 클래스 내에서 다른 제네릭 함수 MyBaseClassFunction 를 호출 하는 일반 함수가 포함됩니다. MyFunction . 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!"));
}
Output