C ++ 11个Lambda表达式作为回调函数(C++11 Lambda Expressions a

2019-07-28 19:50发布

是否有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和这些例子 。



文章来源: C++11 Lambda Expressions as Callback Functions