2013-03-06 125 views
0

我有以下函数调用(myFunc的()是double类型)(?):通话功能

double value = F1->F2->myFunc(); 

我希望得到的东西,当我打电话值应该调用F1-> F2-> myFunc的();

随着我得到的帮助和论坛的帮助理解不是通过一个变量我应该这样做调用函数:

typedef double(*)() m; 
m variable = myFunc; 

,并调用它像变();

不幸的是上面的设置它并没有真正的工作, 我得到一个参考& F2 :: myFunc,但我如何得到它在上述设置?

类似:

typedef double(*)() m; 
m variable = &F2::myFunc; <- doesn't work :(

谢谢你们的帮助!

+1

查看成员函数指针,std :: bind,std :: function和Lambdas-了解这些,你就知道该做什么以及为什么你的代码“不起作用” – 2013-03-06 13:01:13

回答

4

您可以用std::functionstd::bind做到这一点:

std::function<double()> variable = std::bind(&ClassOfF2::myFunc, F1->F2); 

double value = variable(); 
+0

+1,我认为'* F2'应该是'F1-> F2'。 – 2013-03-06 13:02:14

+0

为什么使用绑定,如果你可以使用Lambdas? – 2013-03-06 13:24:32

3

我希望得到的东西,当我打电话值应该调用F1-> F2-> myFunc的();

在C++ 11,你可以使用lambda:

auto l = [&]() { return F1->F2->myFunc(); }; 
double value = l(); 

Scott Meyer's update在他即将出版的新书有效的C++ 11也提到:

不想lambda表达式来std::bind