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.
Requisiti
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.
Requisiti
Opzione del compilatore: /clr
Esempi
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