Funciones genéricas (C++/CLI)
Una función genérica es una función que se declara con parámetros de tipo. Cuando se invoca, utiliza los tipos reales en lugar de los parámetros de tipo.
Todas las plataformas
Comentarios
Esta característica no se aplica a todas las plataformas.
Windows en tiempo de ejecución
Comentarios
Esta característica no se admite en Windows en tiempo de ejecución.
Requisitos
Opción del compilador: /ZW
Common Language Runtime
Una función genérica es una función que se declara con parámetros de tipo. Cuando se invoca, utiliza los tipos reales en lugar de los parámetros de tipo.
Sintaxis
[attributes] [modifiers]
return-type identifier <type-parameter identifier(s)>
[type-parameter-constraints clauses]
([formal-parameters])
{
function-body
}
Parámetros
attributes (Opcional)
Información declarativa adicional. Para obtener más información sobre los atributos y clases de atributos, vea atributos.modifiers (Opcional)
Un modificador para la función, como static. virtual no se permite porque los métodos virtuales no pueden ser genéricos.return-type
Tipo devuelto por el método. Si el tipo de valor devuelto está vacío, no se requiere ningún valor devuelto.identifier
El nombre de la función.type-parameter identifier(s)
Lista separada por comas de identificadores.formal-parameters (Opcional)
Lista de parámetros.type-parameter-constraints-clauses
Esto especifica restricciones en los tipos que se pueden utilizar como argumentos de tipo, y tiene el formato especificado en Restricciones de parámetros de tipo genérico (C++/CLI).function-body
El cuerpo del método, que puede hacer referencia a los identificadores del parámetro de tipo.
Comentarios
Las funciones genéricas son funciones declaradas con un parámetro de tipo genérico. Pueden ser métodos en una clase o struct, o funciones independientes. Una sola declaración genérica declara implícitamente una familia de funciones que difieren sólo en la sustitución de otro tipo real del parámetro de tipo genérico.
En Visual C++, la clase o constructores de struct no se puede declarar con parámetros de tipo genérico.
Cuando se invoca, el parámetro de tipo genérico se reemplaza por un tipo real. El tipo real puede explícitamente especificarse en corchetes menores/mayores mediante la sintaxis similar a una llamada de función de la plantilla. Si se llama sin parámetros de tipo, el compilador intentará deducir el tipo real de los parámetros proporcionados en la llamada de función. Si el argumento de tipo que no se puede deducir de los parámetros utilizados, el compilador notificará un error.
Requisitos
Opción del compilador: /clr
Ejemplos
Ejemplo
El siguiente ejemplo de código muestra una función genérica.
// 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);
}
Ejemplo
Las funciones genéricas se pueden sobrecargar según la firma o el aridad, el número de parámetros de tipo en una función. Además, las funciones genéricas se pueden sobrecargar con funciones no genéricas del mismo nombre, mientras las funciones difieren en algunos parámetros de tipo. Por ejemplo, las siguientes funciones pueden sobrecargar:
// 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) {}
};
Ejemplo
El ejemplo siguiente utiliza una función genérica para encontrar el primer elemento de una matriz. Declara MyClass, que hereda de la clase base MyBaseClass. MyClass contiene una función genérica, MyFunction, que llama a otra función genérica, MyBaseClassFunction, dentro de la clase base. En main, la función genérica, MyFunction, se realiza mediante varios argumentos de tipo.
// 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!"));
}
Resultados
Vea también
Conceptos
Extensiones de componentes para plataformas de tiempo de ejecución