16

渡されたオプションをboost::program_optionsで検証しようとしています。私のコマンドにはいくつかのモードがあり、それぞれに指定可能なパラメータが関連付けられています。私がやろうとしているのは、これらの関連するパラメータがモードで渡されることを確認することです。

unicorn --fly --magic-wings-threshold

ここ--flyで、はモードであり--magic-wings-threshold、は関連するパラメータです。私が気付いたのは--magic-wings-threshold、デフォルト値があるかどうかです。

("magic-wings-threshold,w", po::value<double>(&wings_thresh)->default_value(0.8, "0.8"),
           "Magic wings maximum power"
)

それなら私は使えません

if (vm.count("magic-wings-threshold")( {
    // do stuff
}

ユーザーがそのパラメーターを渡したかどうかを検出します。

デフォルト値のparamsは常に渡され、で検出されるようvm.count()です。誰かが回避策または代替案を知っていますか?

4

2 に答える 2

22

使用するboost::program_options::variable_value::defaulted()

if (vm["magic-wings-threshold"].defaulted())  {
    // assume defaulted value
} else {
    // one was provided
}
于 2012-02-08T20:12:53.653 に答える
0

違いを見たい場合

-k option not provided
-k provided

po :: value()-> implicit_value()を使用する必要があります。次の方法でさまざまな状況を知ることができます。

-k option not provided  ->  vm["k"]==0  
-k option provided      ->  vm["k"]==1
于 2016-09-02T16:42:21.853 に答える