这基本上是关于创建/传递一个从类构造函数/方法中指向成员方法的仿函数的两种不同方法的可读性,样式和性能的问题.
方法1:
using namespace std::placeholders;
std::bind( &MyClass::some_method, this, _1, _2, _3 )
Run Code Online (Sandbox Code Playgroud)
方法2:
[ this ](const arg1& a, arg2 b, arg3& c) -> blah { some_method( a, b, c ); }
Run Code Online (Sandbox Code Playgroud)
我想知道在这种情况下使用lambda是否是无偿的,在某些方面它更容易看到发生了什么,但是你必须明确地提供arg类型.此外,我更喜欢不使用"使用命名空间;" 但是它使得绑定表达式不必要地冗长(例如._1变成std :: placeholders :: _ 1),而lambda避免了这个问题.
最后我应该注意到,出于这个问题的目的,some_method是一个很大的功能,可以做很多事情,并且直接复制到lambda体内会很痛苦.
如果这个问题看起来太模糊,那么我们可以专注于性能差异的答案,如果有的话.
编辑:一个非平凡的用例.
MyClass::MyClass()
: some_member_( CALLBACK_FUNCTOR )
{}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,初始化列表中使用的CALLBACK_FUNCTOR(使用方法1或2定义)使得使用声明(afaik)的范围变得很困难,显然我们不打算包装我们打算立即调用的成员方法.
Pango语法支持一些仅文本标记.据我所知,这并没有延伸到嵌入图像.
环顾四周,我找不到现有实施的方式,但我之前没有做过pango + cairo工作,所以我可能会错过明显的社区.
据我所知,合理的方法是分析字符串,拉出任何标签,创建cairo图像,然后相应地修改它们周围的pango布局.
它似乎也是某人之前可能做过的事情.
我特意在这些问题上寻找答案:
(另请注意我使用红宝石,这可能会影响我的选择)