Sdílet prostřednictvím


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.

prostředí Windows Runtime

Poznámky

Tato funkce není podporována v prostředí 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í parametrů obecných typů (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

Rozšíření komponent pro platformy běhového prostředí

Další zdroje

Obecné typy (rozšíření komponent C++)