Obecné funkce (C + +/ CLI)
Obecné funkce je funkce, která je deklarována s parametry typu.Při skutečné typy se používají namísto parametrů typu.
Všechny platformy
Poznámky
Tato funkce se nevztahuje na všech platformách.
Windows Runtime
Poznámky
Tato funkce není podporována v Windows Runtime.
Požadavky
Volba kompilátoru:/ZW
Common Language Runtime
Obecné funkce je funkce, která je deklarována s parametry typu.Při skutečné typy se používají namísto parametrů typu.
Syntaxe
[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]
([formal-parameters])
{
function-body
}
Parametry
atributy (volitelné)
Další informace o deklarativní.Další informace o atributů a tříd atribut viz atributy.Modifikátory (volitelné)
Modifikátor funkce statická. virtualnení povoleno, protože nemusí být obecný virtuální metody.typ návratu
Typ vrácené metodou.Pokud je návratový typ void, není třeba žádné vrácené hodnoty.identifikátor
Název funkce.Parametr typu identifikační kódy GMO
Seznam identifikátorů oddělených čárkami.formální parametry (volitelné)
Seznam parametrů.Typ parametru omezení doložky
To určuje omezení na typy, které mohou být použity jako argumenty typu a má podobu v Omezení na Obecné zadejte parametry (C + +/ CLI).Funkce subjektu
Tělo metody může odkazovat na identifikátory typu parametru.
Poznámky
Obecné funkce jsou funkce deklarované obecný typ parametru.Mohou být metody třídy nebo struct nebo samostatnou funkcí.Jediné obecné prohlášení implicitně deklaruje řady funkcí, které se liší pouze v nahrazení různých skutečné typu pro obecný typ parametru.
V Visual C++, s parametry obecný typ nelze prohlásit konstruktory tříd nebo struct.
Při volání, obecný typ parametru nahrazuje skutečný typ.Skutečný typ může výslovně uvedeny v lomené závorky pomocí syntaxe podobné volání funkce šablony.Pokud je volána bez parametrů typu kompilátor pokusí odvodit skutečný typ z parametry zadané ve volání funkce.Pokud argument určený typ nemůže být odvozeno z použity parametry, kompilátor ohlásí chybu.
Požadavky
Volba kompilátoru:/clr
Příklady
Příklad
Následující příklad kódu ukazuje obecný funkce.
// 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);
}
Příklad
Obecné funkce můžete přetížení na základě podpisu nebo Arita, počet parametrů typu na funkci.Také Obecné funkce mohou být zatížena Obecné funkce stejný název jako funkce se liší v některých parametrů typu.Například může být přetížena následující funkce:
// 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) {}
};
Příklad
V následujícím příkladu je obecný funkce Najít první prvek v matici.Deklaruje MyClass, které dědí z třídy základní MyBaseClass.MyClassobsahuje obecné funkce MyFunction, který volá funkci jiného obecný, MyBaseClassFunction, v základní třídě.V hlavní, Obecné funkce MyFunction, se nazývá pomocí různých argumentů.
// 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!"));
}
Výsledek
Viz také
Koncepty
Součást rozšíření pro Runtime platformy