Nor*_*löw 6 c++ lambda user-interface callback c++11
是否有任何C++ GUI工具包支持将回调函数定义为C++ 11 lambda表达式?我相信这是一个使用C#(至少与C++相比)编写基于GUI的程序的独特专家.我应该将什么类型的签名用于将lambda表达式作为参数的函数,以及它们如何支持隐式转换?
对问题第二部分的回答:你可以使用std::function<Signature>where Signature= eg void (int)或 - 如果lambda不接受闭包 - 这是一个很好的旧void (Foo*)(int)方法,因为没有闭包的lambda必须可以转换为正确的函数类型.因此,例如调用带签名的方法:
void AddHandler(std::function<void (int)> const &);
Run Code Online (Sandbox Code Playgroud)
可能看起来像这样:
myObject.AddHandler([&](int _) {
// do something and access captured variables by reference
});
Run Code Online (Sandbox Code Playgroud)
是否有任何 C++ GUI 工具包支持将回调函数定义为 C++11 lambda 表达式?
如果它们接受函数指针,那么您至少可以使用不捕获任何内容的 lambda。此类 lambda 可以自动转换为函数指针。
对于采用 lambda 表达式作为参数的函数,我应该使用什么类型签名以及它们如何支持隐式转换?
如果您希望人们使用 lambda 或任何可调用对象,那么您可以让您的 API 接受 std::function 对象,或使用模板:
template<typename Callback>
void do_it(Callback c) {
c();
}
do_it([&]{ c = a+b; });
Run Code Online (Sandbox Code Playgroud)
模板允许内联 lambda,而 std::function 需要间接。这对于 GUI 回调来说可能并不重要。