Какие ошибки вы получаете именно? Я не вижу ничего явно неправильного в коде, показанном в вашем вопросе, поэтому я не могу дать вам прямой ответ.
Однако ответ Корнеля заставил меня усомниться, так как я думал, что функторы, генерируемые boost :: bind, могут принимать любое количество аргументов и просто игнорировать дополнительные.
Так что я быстро взломал это, чтобы проверить:
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <boost/function.hpp>
#include <string>
#include <iostream>
void Foo(const boost::system::error_code&)
{
// whatever
}
struct Client : boost::enable_shared_from_this<Client>
{
void HandleWrite(
const boost::system::error_code& Err,
boost::function<void(const boost::system::error_code&)> OtherHandler
)
{
std::cout << "MyHandler(" << Err << ")\n";
OtherHandler(Err);
}
void MakeTheCall(boost::function<void (const boost::system::error_code&)> Other)
{
using boost::asio::ip::tcp;
// Of course, the scope and initialization of
// io_service, sock and request are all wrong here,
// as we're only interested in testing if the async_write
// call below will compile.
// Don't try to run this at home!
boost::asio::io_service io_service;
tcp::socket sock(io_service);
boost::asio::streambuf request;
boost::asio::async_write(sock, request,
boost::bind(&Client::HandleWrite, shared_from_this(),
boost::asio::placeholders::error,
Other
)
);
}
};
int main()
{
boost::shared_ptr<Client> c;
c->MakeTheCall(boost::bind(&Foo, _1));
return 0;
}
что делает набросок того, что, я думаю, вы пытаетесь сделать.
Как и ожидалось, он компилируется, поэтому сравнение его с тем, что вы на самом деле делаете, может помочь вам найти проблему.