Я пытаюсь создать функцию вариативного шаблона, которая принимает в качестве аргументов перегруженную функцию и ее аргументы :)
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...); }
Я хочу вызвать doit
без каких-либо спецификаторов шаблона и без приведения :
cout << doit(sumall, 7, 6) << endl
Это не компилируется, но когда возвращаемые типы недействительны, все работает идеально:
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);
Можно ли изменить первый шаблон для работы только с модифицирующим шаблоном doit
(я хочу сохранить функции sumall
и вызов doit
)? Я думаю, что это можно сделать, удалив typename R
и оставив только template
, поскольку R
зависит от A ...
и f
, но я понятия не имею, как показать эту зависимость.