我目前正在从事网络软件方面的工作。它有一个主要类,server
这显然代表一个服务器实例。
A 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
to: typedef boost::function<void (const server& sv, int duration)> callback_func;
and if boost::bind
造成任何重大的开销,这可能就是我最终要做的。我只是想知道使用它意味着什么费用boost::bind
.
当然,这会导致开销。它的作用是创建一个函子来存储绑定参数并具有operator()
您用其余参数调用。现在,这很重要吗?我不知道,因为这只是一个词。发出 1000 万个请求并对其进行测量。您是唯一能判断这一开销对您是否重要的人。
另外,我也遇到了类似的问题。因为我并不真正需要委托,所以我可以不用函数指针。但我发现了一个有趣的基准 http://www.codeproject.com/KB/cpp/fastdelegate2.aspx其中还提到了一些替代实现,它们的性能都比boost::function
。这是以可移植性为代价的,并且在某些情况下,实施中存在丑陋的、非标准的黑客行为(但作为回报,性能确实很好)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)