c++ - template - programacion ats funciones




Funciones como argumentos de las plantillas variad. (3)

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?


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

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 .


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






variadic-templates