2017-02-09 1 views
1

연결 핸들러로 람 바어를 사용하여 멤버 함수로 async_connect 향상 호출하는 방법 그러나내가 <code>async_connect</code> 성공적으로 무료 기능으로 사용하고 connect_handler 같은 람다는 다음과 같이 구현

auto self(shared_from_this()); 
boost::asio::async_connect(m_socket, endpoint_iter, [this, self](boost::system::error_code ec, tcp::resolver::iterator){...} 

, 지금은 사용을 강요 해요 no_delay 플래그 이 항목에 대해서는 boost::asio with no_delay not possible? async_connect를 소켓의 멤버 함수로 호출해야합니다.

m_socket.async_connect(endpoint_iter->endpoint(), [this, self](boost::system::error_code ec, tcp::resolver::iterator){...} 

내 컴파일러 (VS2013) 다음과 같은 노력하는 것은 Error 1 error C2338: ConnectHandler type requirements not met

누군가가 아이디어로 어떻게 올바르게 할 수있다 않는 오류를 나에게 준다?

답변

1

무료 기능 async_connect의 핸들러의 서명이 있어야한다 :

void handler(const boost::system::error_code& error, Iterator iterator); 

멤버 함수 basic_stream_socket::async_connect의 핸들러의 서명이 있어야한다 :

void handler(const boost::system::error_code& error); 

추론을 사용하여 여러 엔드 포인트를 줄 것입니다 어떤 함수가 하나의 끝점을 제공하는 동안 어떤 함수가 연결되었는지 알려주는 반복자를 돌려주는 무료 함수입니다. 하나. 당신이 코드는 대부분을 작업 할

그래서 위해 당신의 람다 콜백의 매개 변수에서 반복자를 제거해야합니다 :

m_socket.async_connect(endpoint_iter->endpoint(), [this, self](boost::system::error_code ec){...} 
+1

대단히 감사합니다! 방금 확인했는데 작동 중입니다! – GregPhil