绑定函数(使用 Boost Bind)时是否会对性能产生任何影响(正面或负面)?
也许,也许不是。这取决于。
的结果std::bind
(或者也boost::bind
) 是所谓的“绑定表达式”,它具有由实现确定的不可知类型。这种类型是一个Callable,它是敞篷车到一个实例std::function
(or boost::function
).
在内部,function
(可以)使用类型擦除来处理各种复杂的、有状态的“可调用对象”。在某些(但不一定是全部)情况下,这需要动态分配和虚拟调度。两个都bind
and function
是有状态的,因为它们存储绑定参数。
结果是您应该避免将绑定表达式转换为function
如果可能的话反对。绑定表达式本身可能更便宜,并且您不应该害怕使用bind
(例如,将成员函数指针绑定到实例和参数时)。使用bind
自由,但转换为function
仅当您确实需要管理可调用实体的异构集合时。
这里有两个典型的例子:
坏的;避免这种情况:
std::function<int(bool, char)> f = std::bind(&Foo::bar, x, 12);
void do_something(std::function<int()> func, int & acc)
{
acc += func();
}
更好的;更喜欢这个:
auto f = std::bind(&Foo::bar, x, 12); // unknowable type, but perfectly fine
template <typename F>
void do_something(F && func, int & acc) // can deduce unknowable types
{
acc += func();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)