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