Я хочу написать функцию, которая вызывает другую функцию с ее аргументами. Посмотрите, как я хочу, чтобы он работал:
int sum(int a, int b) { return a + b }
int succ(int a) { return a + 1 }
int size(char* str) { return strlen(str) }
int call(???) { ??? }
int main() {
cout << call(sum, 1, 2) << endl;
cout << call(succ, 41) << endl;
cout << call(size, "teste") << endl;
}
Ожидаемый результат:
3
42
5
Как я могу написать функцию call
(считая, что возвращаемое значение всегда одно и то же)? Единственный способ, которым я могу думать, это следующее:
template<typename T> int call(T func, int a, int b) { return func(a, b) }
template<typename T> int call(T func, int a) { return func(a) }
template<typename T> int call(T func, char* a) { return func(a) }
Есть ли способ решить это повторение с помощью шаблонов, va_list
или что-нибудь еще?
Намерение:
Он предназначен для рисования геометрических изображений, разбора функции с параметрическим уравнением, которое нужно выделить. Пример:
Vector2i circle(float t, float radius) {
return Vector2i(cos(t * 2*PI) * radius, sin(t * 2*PI) * radius);
}
// ...
draw(circle, 10);
Функция circle
будет вызываться много раз внутри draw
с разностями t
(между 0.0
и 1.0
). Остальные аргументы draw направляются непосредственно на функции, 10
будет radius
. (Vector2i - это пользовательский класс).