我正在尝试将名为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 ++。
答案 0 :(得分:3)
问题是你试图在这里传递方法指针,而不是函数指针。方法有一个隐藏的this
参数,仅通过传递read
就可以保持未绑定状态。这种表达式被称为指向成员的指针。
语法的第一个主要区别是方法指针必须使用其封闭类型进行限定,并且在名称前需要&
运算符。这将为您提供&MainPage::read
,这是一个有效的指向成员的表达式。
第二步是绑定隐藏的this
参数。您可以使用std::bind
执行此操作,将参数值“附加”到函数(或方法指针)。它返回一个未指定的类型,该类型已知可调用且已知适合构造std::function
。
startTimer(bind(&MainPage::read, this));
答案 1 :(得分:0)
我能够通过将read声明为函数而不是MainPage的成员来实现此功能。
void read() {
...
}
这不是一个完美的解决方案,但它对我来说已经足够了。