어쨌든 당신은 boost 또는 asio 외부에서 그것을 준비 할 수 있습니다.예를 들어 소켓을
void()
사용 하여 함수 를 노출하는 함수 를 바인딩하려면 다음을 사용할 수 있습니다
bind
.
int foo(std::string const& s, int);
std::function<void()> adapted = std::bind(foo, "hello world", 42);
따라서 일반적으로 다음과 유사한 코드가 있습니다.
boost::asio::async_connect(socket_.lowest_layer(), endpoint_iterator,
boost::bind(&client::handle_connect, this, boost::asio::placeholders::error));
bind 및를 사용하여
this
멤버 함수를 완료 핸들러에 바인딩했습니다.
struct client
{
// ....
void handle_connect(boost::system::error_code err)
{
// you can just use `this->socket_` here
// ...
}
};
이것은
handle_connect
우리가
socket_
멤버 변수를 사용할 수 있음을 의미 합니다.그러나 복잡하게 만들고 싶다면 무료 기능도 사용할 수 있습니다.
boost::asio::async_connect(socket_.lowest_layer(), endpoint_iterator,
boost::bind(&free_handle_connect, boost::ref(socket_), boost::asio::placeholders::error));
이제 묵시적 처리기 함수는 다음과 같습니다.
static void free_handle_connect(
boost::asio::ip::tcp::socket& socket_,
boost::system::error_code err)
{
// using `socket_` as it was passed in
int fd = _socket.native_handle_type();
}
출처
https://stackoverflow.com/questions/22049817