2015-11-06 26 views
0

我试图编写一个函数(我们称之为函数A),它可以接收用户定义的函数作为输入(例如,用户定义的函数任意数量的变量并返回一个整数 - 我们将称这个函数为B)。我想传递函数B作为函数A的参数,只修改函数B中的一些变量,并根据需要从函数A中多次调用函数B.C++将用户定义的函数传递给另一个函数

我在想我可以得到这个通过创建函数B指针的变量并在每次调用时修改指针来工作,但是我不知道如何创建它,所以如果要传递给函数B的变量的数量未知,我可以从函数A中调用函数B 。

有没有人有任何建议,我可以如何将用户指定的函数作为参数传递给另一个函数?

+0

简答:您不能。当你调用B时,你必须传递*一些*参数。改变这一点需要改变源代码,这意味着重新编译。如果您确实需要可变数量的参数,则可能需要编写B来接受类似于参数向量的东西。如果类型可以改变,那可能需要像'std :: vector '一样。 –

回答

1

你想要的是一个函数指针。

例如,通过接受一个int并返回双重的功能。

#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>上寻找有关如何做到这一点的指针。

也有涉及模板(具体地,模板函子)和lambda表达式技术(在C++ 11和更高版本)。但是使用指向函数的指针就足以让你开始。

0

由于你提到你可以修改在函数B的变量,函数指针是不是一个好的选择,特别是当C++引入可调用对象,或std::function。通过构造一个运算符为()的类,您可以像对象一样处理这样的类的对象,并像函数指针一样处理。

另一种替代方法是在C++ 11中引入lambda。您可以简单地写[A_variable_1, A_variable_2](auto parameter){ your code}以使用A中的变量和B中的您自己的变量。

相关问题