template programacion plantillas plantilla pila funciones con clases clase ats arreglos c++ templates variadic-templates

c++ - programacion - Funciones como argumentos de las plantillas variad.



plantillas en c++ (4)

La sintaxis del tipo de puntero de función es molesta. Así que codifique a su alrededor:

template<class T> using type=T; template< type<int(int,int)>* ... Fs > class A { };

Supongamos que tenemos una clase

template <int(*F)(int, int)> class A { // ... };

Toma una función como argumento de plantilla.

Ahora quiero hacer una plantilla variada, que toma las funciones como parámetros de la plantilla.

template <int(*F...)(int, int)> // this won''t compile template <int(*F)(int, int)...> // this won''t compile either

¿Cómo hacerlo correctamente?


Simplemente use F como un argumento de plantilla. Esto no solo le permite usar la función como parámetro sino también otros tipos que implementan el operador de paréntesis. Estas clases se llaman functores .


Usted puede hacer

using Function_t = int(*)(int, int); template <Function_t ... Fs> struct s{};

de lo contrario, si no quieres usar typedef

template <int(*...Fs)(int, int)> struct s{};

Nota : la segunda versión no puede ser anónima (se requiere Fs ) ya que ISO C ++ 11 requiere que una declaración de paquete entre paréntesis tenga un nombre.


template <int(*...F)(int, int)> class A { // ... };