그것은 async_accept()
에 대한 핸들러는 다음과 같은 함수 서명 만족해야 boost::asio document에 지정됩니다 부스트 :: 바인딩을 사용하여 Daytime.3
예에서, 그러나이 핸들러 요구
void accept_handler(
const boost::system::error_code& ec)
{
...
}
을,
class tcp_server
{
public:
tcp_server(boost::asio::io_service& io_service)
: acceptor_(io_service, tcp::endpoint(tcp::v4(), 13))
{
start_accept();
}
private:
void start_accept()
{
tcp_connection::pointer new_connection =
tcp_connection::create(acceptor_.get_io_service());
acceptor_.async_accept(new_connection->socket(),
boost::bind(&tcp_server::handle_accept, this, new_connection,
boost::asio::placeholders::error));
}
void handle_accept(tcp_connection::pointer new_connection,
const boost::system::error_code& error)
{
if (!error)
{
new_connection->start();
}
start_accept();
}
tcp::acceptor acceptor_;
};
이유있다 : 핸들러는 (최대 9 개 인자이다) boost::bind
의 한계를 초과하지 않는 한, 원하는대로 많은 파라미터로 지정 될 수 있는가? 나는 boost::bind
으로 생각해도 정확한 함수 서명이 여전히 일치해야합니다.
handle_accept()
기능과이 기능이 async_accept()
에서 어떻게 사용되는지 확인하십시오. 전체 코드는 here입니다.
이 가이드 : http://en.highscore.de/cpp/boost/index.html (기능 개체 부분)을주의 깊게 읽어서 알아 냈습니다. 답이 맞지만 충분하지는 않지만 답변 해 주셔서 감사합니다. 나는 왜'bind'가 두 개 이상의 매개 변수 함수를 더 적은 매개 변수로 필요한 함수 객체/포인터로 변환시킬 수 있는지 궁금해했다. – Amumu