c++ - boost::bind 会导致开销吗?

标签 c++ boost bind overhead

我目前从事网络软件方面的工作。它有一个主类,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至:typedef boost::function<void (const server& sv, int duration)> callback_func;如果boost::bind导致任何重大开销,这可能是我最后要做的。我只想知道使用 boost::bind 意味着什么成本.

最佳答案

当然会造成开销。它所做的是创建一个存储绑定(bind)参数的仿函数,并有一个 operator(),您可以用剩余的参数调用它。现在,这重要吗?我不知道,因为那只是一个词。发出 1000 万个请求并对其进行测量。您是唯一可以判断此开销对您是否重要的​​人。

另外,我遇​​到了类似的问题。因为我真的不需要委托(delegate),所以我可以不用函数指针。但我发现了一个有趣的 benchmark其中还提到了一些替代实现,它们都比 boost::function 具有更好的性能。这是以可移植性为代价的,在某些情况下,实现过程中会出现丑陋的、非标准的 hack(但作为返回却会带来非常好的性能)。

关于c++ - boost::bind 会导致开销吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5894956/

相关文章:

c++ - 在 Windows 上使用 boost::asio 发送组播性能不佳

javascript - 在没有绑定(bind)的情况下处理 javascript 类/库中的异步事件

php - 在 UPDATE 查询中绑定(bind)参数时出现 PDO 异常

r - tidyverse:有效绑定(bind)列表元素

c++ - 具有依赖范围的嵌套模板

c++ - 比较优化构建与 switch case 和多态性

c++ - 在cygwin下 boost c++静态链接路径

c++ - Eclipse Linux 库存 "Hello World"- 应用程序无法运行

c++ - 包含头文件时,路径是否区分大小写?

c++ - 迭代器和简单的赋值/析构函数