我目前正在开发网络软件。它有一个主要的类server
,显然表示一个服务器实例。
server
实例可以发送请求,并通过回调通知用户响应信息。
代码如下:
class server
{
public:
typedef boost::function<void (int duration)> callback_func;
void send_request(endpoint& ep, callback_func cb);
};
现在假设我作为用户想要回调函数知道调用它的实例,我可以采取以下措施:
void mycallback(const server& sv, int duration) { ... }
server sv;
sv.send_request("localhost", boost::bind(&mycallback, boost::ref(sv), _1));
但我想知道:这样做是否会有任何开销?调用
mycallback
是否比使用“常规”调用更慢?谢谢。
注:我当然可以将我的
typedef
更改为:typedef boost::function<void (const server& sv, int duration)> callback_func;
,如果boost::bind
造成了任何显著的开销,那么最终我可能会这样做。我只是想知道使用boost::bind
意味着什么成本。
boost::function
引入了一种小对象优化,这使得 2007 年参考基准测试的结果无效。 - Marc Mutz - mmutz