Вызывает ли boost :: bind накладные расходы?

В настоящее время я работаю над сетевым программным обеспечением. У него есть один основной класс, 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 callback_func; и если boost :: bind вызывает какие-либо значительные накладные расходы, вероятно, это то, что я сделаю в конце. Я просто хотел бы знать, какие затраты подразумевают использование boost :: bind .

5
задан ereOn 5 May 2011 в 08:48
поделиться