В настоящее время я пишу программу на 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: в функции-члене 'void Server :: 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: примечание: void ClientConnection :: asyncRead (void (*) (std :: string)) ClientConnection.h: 16: 9: примечание: нет kпреобразование для аргумента 1 из 'Server :: clientAccepted (std :: shared_ptr, const boost :: system :: error_code &) ::' to 'void (*) (std :: string)'
Как можно решить эту проблему?