C++ - std::function 作为仿函数的参数
C++ - std::function as parameter for a functor
我写了一个 Event
class 作为回调函数的包装器,实现为 std::function
s。这是它的样子:
class Event
{
public:
Event() : default_handler([]() {});
Event(const std::function<void()> handler) : default_handler(handler);
void SetHandler(std::function<void()> handler)
{
custom_handler = handler;
}
void operator()(void)
{
default_handler();
custom_handler();
}
private:
const std::function<void()> default_handler;
std::function<void()> custom_handler;
};
然后,在另一个 class 中,我有一个事件实例:
class Control
{
public:
Control();
//Should call constructor Event()
Event myEvent1;
//Should call constructor Event(std::function<void()>)
Event myEvent2([]() {/*do stuff... */})
};
然而,这不会在 VC++ 上编译,为两个处理程序生成错误 C3646(未知覆盖说明符)和错误 C4430(缺少类型说明符 - 假设为 int),更多语法错误我的活动 2。我哪里错了?
您应该使用 {}
语法:
Event myEvent2{[]() {/*do stuff... */}};
default member initializer 的语法是
member = value;
或
member{value};
但不是
member(value); // Invalid syntax
写的时候
Event myEvent2([]() {/*do stuff... */});
编译器将 myEvent2 视为成员函数,而不是构造函数调用。
我写了一个 Event
class 作为回调函数的包装器,实现为 std::function
s。这是它的样子:
class Event
{
public:
Event() : default_handler([]() {});
Event(const std::function<void()> handler) : default_handler(handler);
void SetHandler(std::function<void()> handler)
{
custom_handler = handler;
}
void operator()(void)
{
default_handler();
custom_handler();
}
private:
const std::function<void()> default_handler;
std::function<void()> custom_handler;
};
然后,在另一个 class 中,我有一个事件实例:
class Control
{
public:
Control();
//Should call constructor Event()
Event myEvent1;
//Should call constructor Event(std::function<void()>)
Event myEvent2([]() {/*do stuff... */})
};
然而,这不会在 VC++ 上编译,为两个处理程序生成错误 C3646(未知覆盖说明符)和错误 C4430(缺少类型说明符 - 假设为 int),更多语法错误我的活动 2。我哪里错了?
您应该使用 {}
语法:
Event myEvent2{[]() {/*do stuff... */}};
default member initializer 的语法是
member = value;
或
member{value};
但不是
member(value); // Invalid syntax
写的时候
Event myEvent2([]() {/*do stuff... */});
编译器将 myEvent2 视为成员函数,而不是构造函数调用。