2

情報

次のように、boost::function を使用してコールバックをパラメーターとして渡したいと思います。

void ReadPacket(
        boost::function<void (const boost::system::error_code&, Packet* p)> callback);

そしてそれを使用します:

ReadPacket(boost::bind(
    &ServerSession::storePacket,
    this,
    _1,
    _2
    ));

結局、一連のコールバックの後、私は呼び出します

callback(ec, packet);

問題

デバッグでソリューションをコンパイルしたところ、すべて問題ないように見えます...

しかし、リリースでは、上記のエラーがたくさんありました

BasicSession.h(30): error C2039: 'function' : is not a member of 'boost'
BasicSession.h(30): error C2061: syntax error : identifier 'function'
BasicSession.h(30): error C2059: syntax error : ')'
BasicSession.h(30): error C2143: syntax error : missing ')' before ';'

私は混乱し、がっかりしています。

提案

には異なる構文があることがわかりましたboost::function。たとえば、boost::function0またはboost::function1. これは、VS2010 が何かをサポートしていないために作成されました (正確にはわかりません)。

私は正しいですか?

また、このアプリケーションを可能な限り移植可能でクロスプラットフォームにする必要もあります。

ブースト 1.47 および VS2010

4

2 に答える 2

3

見逃した場合は、ブースト機能のチュートリアルをご覧ください。チュートリアルを見ると、「優先」構文と「ポータブル」構文の両方がリストされています。コードを移植可能にしたいので、後者を選択することをお勧めします。

于 2011-11-17T16:42:32.877 に答える
2

解決策はboost::function4

于 2011-11-17T16:40:53.237 に答える