我正在尝试在类中存储回调函数,因此我可以使用不同的回调创建不同的实例。不幸的是,stackoverflow迫使我写更多无用的东西,说我的帖子主要是代码。但是,通过查看下面的代码,我没有看到任何麻烦立即理解我的问题。
无法理解为什么这不起作用:
#include <iostream>
#include <functional>
class A {
public:
A(std::function<void()> lambda) : lambda_{lambda} {};
void Run() { lambda_(); };
private:
std::function<void()> lambda_;
};
auto main() -> int {
auto q = []{};
A(q) a;
a.Run();
}
错误:
1.cpp:15:10: error: expected ‘;’ before ‘a’
A(q) a;
^
虽然这样做:
#include <iostream>
#include <functional>
void A(std::function<void()> lambda) {
lambda();
};
auto main() -> int {
auto q = []{};
A(q);
}
答案 0 :(得分:4)
在变量声明中传递构造函数参数的语法是:
A a(q);
更一般地说,声明变量的不同方式是:
TypeName variableName; // no arguments
TypeName variableName(); // WRONG: this is a function declaration
TypeName variableName(arg1, arg2, ...);
使用C ++ 11 uniform initialization:
TypeName variableName{}; // no arguments
TypeName variableName{arg1, arg2, ...};
答案 1 :(得分:2)
使用参数a
初始化对象q
的正确语法是
A a(q);
不
A(q) a;