Funkcje ogólne (C++/CLI)
Funkcja generic jest funkcji, która jest zadeklarowana z parametrów typu.Po wywołaniu rzeczywiste typy są używane zamiast parametrów typu.
Wszystkie platformy
Uwagi
Ta funkcja nie stosuje się do wszystkich platform.
Środowisko wykonawcze systemu Windows
Uwagi
Ta funkcja nie jest obsługiwana w Środowisko wykonawcze systemu Windows.
Wymagania
Opcja kompilatora:/ZW
Środowisko uruchomieniowe języka wspólnego
Funkcja generic jest funkcji, która jest zadeklarowana z parametrów typu.Po wywołaniu rzeczywiste typy są używane zamiast parametrów typu.
Składnia
[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]
([formal-parameters])
{
function-body
}
Parametry
atrybuty (opcjonalnie)
Dodatkowe informacje deklaracyjne.Aby uzyskać więcej informacji na atrybutów i klas atrybutów Zobacz atrybuty.Modyfikatory (opcjonalnie)
Modyfikator funkcji, takich jak statyczny. virtualnie jest dozwolone od metod wirtualnych nie może być rodzajowy.Typ zwrotu
Typ zwracany przez metodę.Jeśli typ zwracany jest nieważne, nie zwraca wartości jest wymagane.Identyfikator
Nazwa funkcji.Parametr typu identyfikator(-y)
Lista rozdzielanych przecinkami identyfikatorów.Parametry formalne (opcjonalnie)
Lista parametrów.Typ parametr ograniczenia klauzul
To określa ograniczenia na typy, które mogą być używane jako argumenty typu i ma postać określone w Ograniczenia parametrów typu ogólnego (C++/CLI).treści funkcji
Treść metody, która może odnosić się do identyfikatorów typu parametru.
Uwagi
Ogólne funkcje są funkcje zadeklarowane z parametr typu rodzajowego.Mogą one metody w funkcje klasy lub struktury lub autonomicznej.Pojedynczą deklarację rodzajowy niejawnie deklaruje rodziny funkcji, które różnią się jedynie podstawiania innego typu rzeczywistych dla parametru typu rodzajowego.
W Visual C++, nie mogą zostać uznane za Konstruktory klasy lub struktury z parametrami typu rodzajowego.
Po wywołaniu parametr typu rodzajowego jest zastępowany przez rzeczywisty typ.Rzeczywisty typ mogą być jawnie określone w nawiasach, używając składni podobnej do wywołania funkcji szablonu.Jeśli wywołany bez parametrów typu, kompilator będzie próbował wywnioskowanie rzeczywisty typ z parametry podane w wywołaniu funkcji.Jeśli argument Typ zamierzonego nie można wywnioskować z parametry używane, kompilator zgłosi błąd.
Wymagania
Opcja kompilatora:/clr
Przykłady
Przykład
Poniższy przykładowy kod ilustruje funkcja generic.
// 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);
}
Przykład
Ogólne funkcje można przeciążony, na podstawie podpisu lub liczba ról, liczba parametrów typu funkcji.Ponadto ogólne funkcje można nadmiernie obciążony-uniwersalne funkcje o tej samej nazwie, tak długo, jak funkcje różnią się w niektórych parametrów typu.Na przykład może być przeciążone następujące funkcje:
// 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) {}
};
Przykład
Poniższy przykład używa funkcji rodzajowy, aby znaleźć pierwszego elementu w tablicy.Deklaruje MyClass, która dziedziczy z klasy bazowej MyBaseClass.MyClasszawiera funkcję rodzajowy, MyFunction, która wywołuje innej funkcji rodzajowy, MyBaseClassFunction, w klasie podstawowej.W główne, funkcja generic MyFunction, jest wywoływana przy użyciu innego typu argumentów.
// 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!"));
}
Dane wyjściowe
Zobacz też
Koncepcje
Component Extensions dla platform środowiska uruchomieniowego