Udostępnij za pośrednictwem


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

Inne zasoby

Typy ogólne (C++ Component Extensions)