Boost.Asioを使ってるとよく出てくる
async_xxx(boost::bind(&Client::on_xxx, this, _1));
というメンバ関数のbind。さすがに非同期通信でいっぱい書いてるとめんどくさいです。
可変長マクロで短くしてみました。
#include <boost/bind.hpp> #define xbind(F, ...) boost::bind(&this_type::F, this, __VA_ARGS__)
そのクラスに、自分自身の型を示すthis_typeをtypedefしておけば使えます。
VC++9.0で動作確認。
#include <boost/asio.hpp> #include <boost/bind.hpp> #include <iostream> #define xbind(F, ...) boost::bind(&this_type::F, this, __VA_ARGS__) namespace asio = boost::asio; class Client { asio::io_service& io_service_; asio::deadline_timer timer_; typedef Client this_type; public: Client(asio::io_service& io_service) : io_service_(io_service), timer_(io_service) {} void start() { timer_.expires_from_now(boost::posix_time::seconds(3)); timer_.async_wait(xbind(on_timer, _1)); } private: void on_timer(const boost::system::error_code) { std::cout << "(^o^)" << std::endl; } }; int main() { asio::io_service io_service; Client client(io_service); client.start(); io_service.run(); }