是否有C ++图形用户界面工具包出来的回调函数,如C ++ 11个lambda表达式有支持定义是什么? 我相信这是用C#(相比于C ++至少)编写基于GUI程序的唯一职业。 我应该使用什么类型的签名功能以lambda表达式作为参数,并如何这些支持隐式转换?
Answer 1:
是否有C ++图形用户界面工具包出来的回调函数,如C ++ 11个lambda表达式有支持定义是什么?
如果他们接受函数指针,那么你至少可以使用不捕获任何lambda表达式。 这样的lambda可自动转换到函数指针。
我应该使用什么类型的签名功能以lambda表达式作为参数,并如何这些支持隐式转换?
如果你希望人们使用lambda表达式或任何可调用的对象,那么你既可以有你的API接受的std ::函数对象,或使用模板:
template<typename Callback>
void do_it(Callback c) {
c();
}
do_it([&]{ c = a+b; });
模板将允许拉姆达被内联,而性病::功能需要间接。 这可能没有多大关系的GUI回调。
Answer 2:
在回答这个问题的第二部分:你可以使用std::function<Signature>
这里Signature
=如void (int)
或-如果lambda表达式不采取封闭-好老void (Foo*)(int)
方法,因为没有一个封闭的拉姆达必须转换为正确的函数类型。 因此,例如与签名的方法调用:
void AddHandler(std::function<void (int)> const &);
看起来是这样的:
myObject.AddHandler([&](int _) {
// do something and access captured variables by reference
});
Answer 3:
有符合您的要求,新的GUI工具包。 它试图以提高开发效率提供了许多功能。
介绍了图书馆。 http://nanaproject.wordpress.com/2011/12/16/preliminary-study-of-nana-c-library/
文章解释如何使用库和std ::绑定在一起,以降低复杂性。 http://nanaproject.wordpress.com/2012/01/31/idioms-and-insights-for-a-good-design/
玩得开心!
Answer 4:
随着C ++ 11 templatious库不要紧GUI是否支持lambda表达式。 您可以GUI做任何你想要的信息,并保持相同的代码在域逻辑侧。 看看这篇文章关于驯服的Qt和这些例子 。