我试图编写一个函数(我们称之为函数A),它可以接收用户定义的函数作为输入(例如,一个用户定义的函数,它接受任意数量的变量并返回一个整数 - 我们将这个函数称为B)。我想将函数B作为函数A的参数传递,只修改函数B中的一些变量,并在函数A中多次调用函数B.
我想我可以通过制作函数B指针的变量并在每次调用时修改指针来实现这一点,但是我不知道如何制作它所以我可以从函数A中调用函数B如果要传递给函数B的变量数是未知的。
有没有人对如何将用户指定的函数作为参数传递给另一个函数有任何建议?
答案 0 :(得分:2)
你想要的是一个指向函数的指针。
例如,传递接受int
并返回double的函数。
#include <iostream>
double B(int x) // sample function that we call
{
return x*42.0;
}
void A(double (*f)(int))
{
for (int i = 0; i < 25; ++i)
std::cout << f(i) << '\n';
}
int main()
{
A(B);
}
如果要传递接受变量参数列表的函数,请修改上述内容。在标准标题<cstdarg>
上查找有关如何执行此操作的指示。
还有涉及模板(特别是模板化仿函数)和lambdas(在C ++ 11及更高版本中)的技术。但是使用指向函数的指针足以让你开始。
答案 1 :(得分:0)
由于您提到可以修改函数B中的变量,因此函数指针不是一个好的选择,尤其是当C ++引入可调用对象时,或std::function
。通过构造一个运算符()
重载的类,您可以将此类的对象视为对象,就像函数指针一样。
另一种选择是在C ++ 11中引入的lambda。你可以简单地写[A_variable_1, A_variable_2](auto parameter){ your code}
来使用A中的变量和B中你自己的变量。