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