5

Boost を使用すると、次を使用してオプションのインプレースを作成できます。

boost::optional<boost::asio::io_service::work> work = boost::in_place(boost::ref(io_service));

そして、それを解除します:

work = boost::none;

C++14 / 実験的サポートにより、代わりに以下を使用してオプションのインプレースを構築できます。

std::experimental::optional<boost::asio::io_service::work> work;
work.emplace(boost::asio::io_service::work(io_service));

でもどうやって解除しようか迷ってます…

4

3 に答える 3

3

オプションを解放するこの最も簡単な方法はfoo = {};、解放された prvalue からの移動代入として解決される withoptionalです。仕様は、実際には、含まれている型からの割り当てとあいまいになるこの構文を有効にするために、その道を踏み外しています。(詳細については、N4023 の [optional.object.assign] パラ 18-23 を参照してください)

于 2014-11-12T22:21:04.330 に答える
1

ヘッダーを読んだ後、 std::experimental::optional を解除する正しい方法は次のようです。

work = std::experimental::nullopt;
于 2014-11-12T21:37:40.330 に答える