2017-05-03 1 views
0

제목으로 저는 작동하는 클라이언트 서버 응용 프로그램을 가지고 있지만 이제는 더 우아하게 소프트웨어를 재 설계하려고합니다. 그래서 내가 방법을 http_listener을 만들고 POST를 처리하고 얻을 수있는 서버 클래스를 생성하지만 anymore.In 작동하지 않습니다 그 후이 - 안녕 :http_listener casablanca가 공용 메서드에서 바인딩하지 않습니다

class Server 

{ 공개 : 서버() {}

Server(utility::string_t url); 

pplx::task<void> open(); 
pplx::task<void> close(); 


void handle_post(web::http::http_request message); 

개인 :

// Error handlers 
static void handle_error(pplx::task<void>& t); 
// HTTP listener 
web::http::experimental::listener::http_listener m_listener; 

};

Server::Server(utility::string_t url) : m_listener(url) 

{

m_listener.support(methods::POST, [this](http_request request){return Server::handle_post(request); }); 
m_listener.support(methods::GET, handle_get); 

}

handle_get이 테스트가 .c에 정의되어 있으며 그것은 작동하지만 난 POST를 지원할 수 아니에요 :

그리고 .ci에서

는이 방법. 나는이 같은 POST 방법의 다른 초기화를 시도 :

m_listener.support(methods::GET, std::bind(&Server::handle_post, this, std::placeholders::_1)); 

그러나 그것은 작동하지 않습니다. 제안 사항?

답변

2
m_listener.support(methods::POST, [this](http_request request){ this->handle_post(request); }); 

더 정확하게 보입니다. 그러나 http_request은 복사가 가능합니까? 그렇지 않은 경우 std::move해야하거나 참조로 전달하십시오.

+0

이제 제 2의 "솔루션"이 작동하지 않는 이유를 설명해 주시겠습니까? 나는 그들을 성공 stackoverflow 많은 스레드에서 발견했다. – kenhero

+0

@kenhero 나는 당신이 사용하고있는 라이브러리에 익숙하지 않지만 첫 번째 시도에서'this '를 전달하지 않는다고 생각했다. –

관련 문제