6

g++-4.7 (具体的には Ubuntu/Linaro 4.7.3-2ubuntu~12.04) での C++11 のサポートを調査していますが、違いを見つけているようです。

特に、 Boost ASIO 非同期クライアントの例 ( http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/example/http/clientから取得) の出現箇所をコメントアウトし#include <boost/bind.hpp>て体系的に置き換えるboost::bindと、 /async_client.cpp )、プログラムはコンパイルされなくなります。std::bind

これについての説明はありますか?

4

2 に答える 2

7
#include <functional>
namespace boost {
    namespace asio {
        namespace stdplaceholders {
            static decltype ( :: std :: placeholders :: _1 ) & error = :: std :: placeholders :: _1;
            static decltype ( :: std :: placeholders :: _2 ) & bytes_transferred = :: std :: placeholders :: _2;
            static decltype ( :: std :: placeholders :: _2 ) & iterator = :: std :: placeholders :: _2;
            static decltype ( :: std :: placeholders :: _2 ) & signal_number = :: std :: placeholders :: _2;
        }
    }
}

boost::asio::stdplaceholders::*の代わりに使用しますboost::asio::placeholders::*

于 2013-07-01T22:15:48.743 に答える
4

boost::asio::placeholdersの併用はできないようstd::bindです。リンクした例では、最初の呼び出しboost::bindは次のコードで発生します。

resolver_.async_resolve(query,
    boost::bind(&client::handle_resolve, this,
      boost::asio::placeholders::error,
      boost::asio::placeholders::iterator));

単純に置き換えるboost::bindstd::bind、一連のエラーが発生します。コンパイルするには、に置き換える必要がありboost::asio::placeholdersますstd::placeholders

resolver_.async_resolve(query,
    std::bind(&client::handle_resolve, this,
      std::placeholders::_1,
      std::placeholders::_2));

これらの変更を行った後、コードが機能的に同じであることを確認していないことに注意してください。コンパイルできることだけです。

于 2013-07-01T20:25:38.893 に答える