0

次のコード行は、問題なく正しくコンパイルされます。

boost::bind(boost::ref(connected_),
            boost::dynamic_pointer_cast<session<version> >(shared_from_this()),
            boost::asio::placeholders::error);

ただし、boost::functionに割り当てる場合、または次のようなコールバックとして割り当てる場合:

socket_->async_connect(connection_->remote_endpoint(),
                      boost::bind(boost::ref(connected_),
                      boost::dynamic_pointer_cast<session<version> >(shared_from_this()),
                      boost::asio::placeholders::error));

理解できないエラーが大量に発生しています (ここに収まらないほど長いため、リンクされています)。

一方、次のように無料のシグナルを boost::function にバインドすることに成功しました。

void print(const boost::system::error_code& error)
{
    cout << "session connected";
}

int main()
{
boost::signal<void(const boost::system::error_code &)> connected_;
connected_.connect(boost::bind(&print, boost::asio::placeholders::error));

    client<>::connection_t::socket_ptr socket_(new client<>::connection_t::socket_t(conn->service())); // shared_ptr of a tcp socket

    socket_->async_connect(conn->remote_endpoint(),
                       boost::bind(boost::ref(connected_),
                       boost::asio::placeholders::error));
    conn->service().run(); // io_service.run()
    return 0;
}

session connectedこれは機能し、正しく印刷されます。ここで何が間違っていますか?

4

1 に答える 1

0

バインドのトラブルシューティング ガイドを読みましたか? 私はあなたのコンパイラに詳しくありませんが、あなたのエラーは、トラブルシューティング セクションの 2 番目の箇条書き「指定された引数で関数オブジェクトを呼び出すことはできません」に似ているようです。

于 2010-06-06T15:04:19.797 に答える