Funzioni generiche (C++/CLI)

Una funzione generica è una funzione dichiarata con i parametri di tipo.Quando vengono chiamati, i tipi effettivi vengono invece utilizzati parametri di tipo.

Tutte le piattaforme

Note

Questa funzionalità non si applica a tutte le piattaforme.

Windows Runtime

Note

Questa funzionalità non è supportata in Windows Runtime.

ssea4yk6.collapse_all(it-it,VS.110).gifRequisiti

Opzione del compilatore: /ZW

Common Language Runtime

Una funzione generica è una funzione dichiarata con i parametri di tipo.Quando vengono chiamati, i tipi effettivi vengono invece utilizzati parametri di tipo.

Sintassi

[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]

([formal-parameters])
{
   function-body
}

Parametri

  • attributi (facoltativo)
    Informazioni dichiarative aggiuntive.Per ulteriori informazioni sugli attributi e sulle classi Attribute, vedere gli attributi.

  • modificatori (facoltativo)
    Un modificatore per la funzione, come static. virtual non è consentito poiché i metodi virtuali non possono essere generici.

  • tipo restituito
    Tipo restituito dal metodo.Se il tipo restituito è void, nessun valore restituito obbligatorio.

  • identificatore
    Il nome della funzione.

  • identificatori di parametro di tipo
    Elenco delimitato da virgole degli identificatori.

  • parametri formali (facoltativo)
    Elenco di parametri.

  • tipo-parametro-vincolo-clausole
    Indica le restrizioni sui tipi che possono essere utilizzate come argomenti di tipo e assume il formato specificato in Vincoli su parametri di tipo generico (C++/CLI).

  • corpo della funzione
    Il corpo del metodo, che può fare riferimento agli identificatori di parametro di tipo.

Note

Le funzioni generiche sono funzioni dichiarate con un parametro di tipo generico.Possono essere metodi in una classe o della struttura, o funzioni autonome.Una sola dichiarazione generica in modo implicito dichiara una famiglia di funzioni che differiscono solo in sostituzione del tipo diverso per il parametro di tipo generico.

In Visual C++, la classe o costruttori di struct non può essere dichiarato con parametri di tipo generico.

Una volta chiamato, il parametro di tipo generico è sostituito da un tipo effettivo.Il tipo effettivo può essere specificato in modo esplicito in parentesi angolari destre (utilizzando una sintassi simile a una chiamata di funzione di modello.Se viene chiamato senza parametri di tipo, il compilatore tenta di dedurre il tipo effettivo dai parametri forniti nella chiamata di funzione.Se l'argomento di tipo desiderato non può essere dedotto dai parametri utilizzati, il compilatore segnala un errore.

ssea4yk6.collapse_all(it-it,VS.110).gifRequisiti

Opzione del compilatore: /clr

ssea4yk6.collapse_all(it-it,VS.110).gifEsempi

Esempio

Nell'esempio di codice viene illustrata una funzione generica.

// 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);
}

Esempio

Le funzioni generiche possono essere sottoposte a overload in base all'atto di stipulazione o arietà, il numero di parametri di tipo in una funzione.Inoltre, le funzioni generiche possono essere sottoposte a overload con le funzioni non generiche dello stesso nome, purché le funzioni differiscono in alcuni parametri di tipo.Ad esempio, le funzioni seguenti possono essere sottoposte a overload:

// 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) {}
};

Esempio

Nell'esempio viene utilizzata una funzione generica per cercare il primo elemento in una matrice.Dichiara MyClass, che eredita dalla classe base MyBaseClass.MyClass contiene una funzione generica, MyFunction, che chiama un'altra funzione generica, MyBaseClassFunction, nella classe di base.In main, la funzione generica, MyFunction, viene definita utilizzando gli argomenti di tipo diverso.

// 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

  
  

Vedere anche

Concetti

Estensioni componenti per le piattaforme runtime

Altre risorse

Generics (Estensioni del componente C++)