лямбда-выражения c ++ 0x, не позволяя мне пройти как function ptr

Я сейчас пишу программу на 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)'

Как можно решить эту проблему?

5
задан Johannes Schaub - litb 1 October 2011 в 14:02
поделиться