Нет соответствующей функции для вызова привязки при использовании websocketpp

Я делаю приложение (С++), которое является клиентом веб-сокета и сервером веб-сокета. Для этого я использую библиотеку websocketpp. Чтобы сделать приложение и клиентом, и сервером, я хочу, чтобы endpoint1.run() и endpoint2.listen(port) были многопоточными. Здесь что-то идет не так.

Обычно (один поток) я использую: endpoint.listen(port);, который работает.

Чтобы сделать его многопоточным, я использую:

boost::thread t(boost::bind(&server::listen, &endpoint, port));
sleep(1);
cout << "After thread! \n";
t.join();

Однако я получаю сообщение об ошибке:

main.cpp:116: error: no matching function for call to ‘bind(<unresolved overloaded function type>, websocketpp::server*, uint16_t&)’

server::listen — это перегруженная функция, должен ли я называть ее по-другому в bind?


person Rogier    schedule 24.05.2012    source источник
comment
Существует ли более одного метода server::listen?   -  person juanchopanza    schedule 24.05.2012
comment
да, четыре. Как я могу указать на правильный?   -  person Rogier    schedule 24.05.2012
comment
Это некрасиво, но возможно. см. ссылку в ответе ниже.   -  person juanchopanza    schedule 24.05.2012


Ответы (2)


Ознакомьтесь с документацией по ускорению. Есть хороший пример.
Вам нужно самостоятельно разрешить двусмысленность.

person mkaes    schedule 24.05.2012

Для тех, кто все еще задается вопросом, как это реализовать:

void(websocketpp::role::server<websocketpp::server>::*f)(uint16_t,size_t) = &websocketpp::role::server<websocketpp::server>::listen;

boost::thread t(f, &endpoint, port, 1); //No need to use boost::bind here

и после этого вызовите t.detach() или endpoint.stop() и t.join()

person KillerFox    schedule 23.07.2012