将函数作为参数传递给另一个函数C ++

时间:2016-04-01 20:09:42

标签: c++ pointers methods

我正在尝试将名为read的函数传递给另一个名为start的函数。

void MainPage::read() {
    ...
}

void MainPage::start(std::function< void() > func) {
    ...
}

给我提出问题并调用启动功能的那一行就是这一行。这是我的主要职能。

start( read );

当我尝试编译时,我收到的错误对我没什么帮助。

C3867   'App1::MainPage::read': non-standard syntax; use '&' to create a pointer to member

我现在无法重现它,但在尝试以不同方式传递参数时,我遇到了另一个错误,就是这样:

C2664   void App1::MainPage::start(std::function<void (void)>cannot convert argument 1 from 'void(void)' to 'std::function<void (void)>

我正在使用VS2015社区并使用C ++。

2 个答案:

答案 0 :(得分:3)

问题是你试图在这里传递方法指针,而不是函数指针。方法有一个隐藏的this参数,仅通过传递read就可以保持未绑定状态。这种表达式被称为指向成员的指针。

语法的第一个主要区别是方法指针必须使用其封闭类型进行限定,并且在名称前需要&运算符。这将为您提供&MainPage::read,这是一个有效的指向成员的表达式。

第二步是绑定隐藏的this参数。您可以使用std::bind执行此操作,将参数值“附加”到函数(或方法指针)。它返回一个未指定的类型,该类型已知可调用且已知适合构造std::function

startTimer(bind(&MainPage::read, this));

ideone example

答案 1 :(得分:0)

我能够通过将read声明为函数而不是MainPage的成员来实现此功能。

void read() {
    ...
}

这不是一个完美的解决方案,但它对我来说已经足够了。