Я сейчас работаю над сетевым программным обеспечением. У него есть один основной класс, 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
.