Función sobrecargada como argumento de la función de plantilla variadic
Estoy tratando de hacer una función de plantilla variable, que toma como argumentos la función sobrecargada y sus argumentos:)
int sumall(int a) { return a; }
int sumall(int a, int b) { return a+b; }
template<typename R, typename... A>
R doit( R(*f)(A...), A... a) {
return f(a...); }
Quiero llamardoit
sin ningún especificador de plantilla ni conversión:
cout << doit(sumall, 7, 6) << endl
Eso no se compila, pero cuando los tipos de retorno son nulos, todo funciona perfectamente:
void printsum(int a) { cout << a << endl; }
void printsum(int a, int b) { cout << a+b << endl; }
template<typename... A>
void vdoit( void(*f)(A...), A... a) {
f(a...); }
// ...
vdoit(printsum, 7, 6);
¿Es posible modificar la primera plantilla para trabajar solo con modyfing?doit
plantilla (quiero preservarsumall
funciones ydoit
llamada)? Creo que se puede hacer eliminandotypename R
y dejando solotemplate<typename... A>
ya queR
depende deA...
yf
, pero no tengo idea de cómo mostrar esa dependencia.