Я сейчас пишу программу на C ++ 0x, и я довольно ново для.
Я настраиваю обратные вызовы между объектами и использую лямбда для сопоставления типов (например, boost :: bind ()
разными способами)
Если я вызываю функцию в библиотеке asio, например:
socket_.async_read_some(buffer(&(pBuf->front()), szBuffer),
[=](const boost::system::error_code &error, size_t byTrans) {
this->doneRead(callBack, pBuf, error, byTrans); });
Это компилируется нормально и работает, как ожидалось, 'doneRead' вызывается из 'async_read_some'
, поэтому у меня есть аналогичный обратный вызов в моем собственном коде:
client->asyncRead([=](string msg){this->newMsg(msg); });
Для этого требуется только строка, а прототип asyncReads выглядит следующим образом
void ClientConnection::asyncRead(void(*callBack)(string))
Но я получаю эту ошибку компиляции:
Server.cpp: In member function 'void Сервер :: clientAccepted (std :: shared_ptr, const boost :: system :: error_code &) ': Server.cpp: 31: 3: ошибка: нет соответствия функция для вызова 'ClientConnection :: asyncRead (Server :: clientAccepted (std :: shared_ptr, const boost :: system :: error_code &): :) ' Server.cpp: 31: 3: примечание: кандидат: ClientConnection.h: 16: 9: примечание: недействительно ClientConnection :: asyncRead (void (*) (std :: строка)) ClientConnection.h: 16: 9: примечание: нет известное преобразование для аргумента 1 из 'Server :: clientAccepted (std :: shared_ptr, const boost :: system :: error_code &) :: ' на 'void (*) (std :: string)'
Как можно решить эту проблему?