19

私のプログラム ( ) は、 、、およびprog.exeの 4 つのフラグをサポートしています。でも:-P-p-b-s

  • -b-p一緒に指定し、セットを構成し、数値を持たなければなりません。-b 42
  • -s上記のセットで指定することはできません。
  • -Pどちらの場合も必須です

そのprog.exeため、次のいずれかとしてのみ実行できます

prog.exe -P -s 

また

prog.exe -P -b -42 -p 8

ブースト プログラム オプションで上記の相互に排他的なコマンド ライン オプションのセットを指定する方法はありますか?

4

1 に答える 1

26

どのように機能するかを理解するには、いくつかのチュートリアル[1] [2]boost::program_optionsから始める必要があります。

次に、 real.cppで説明されているように、小さな関数を定義するだけで、相互に排他的な 2 つのオプションを定義できます。たとえば、conflicting_options()関数を定義する 2 つの競合する (または依存する) オプションを指定できます。

void conflicting_options(const boost::program_options::variables_map & vm,
                         const std::string & opt1, const std::string & opt2)
{
    if (vm.count(opt1) && !vm[opt1].defaulted() &&
        vm.count(opt2) && !vm[opt2].defaulted())
    {
        throw std::logic_error(std::string("Conflicting options '") +
                               opt1 + "' and '" + opt2 + "'.");
    }
}

そして呼び出す

conflicting_options (vm, "quiet", "verbose");

直後のboost::program_options::store()

相互に排他的な 2 つの位置オプションを定義できるかどうかはまだわかりませんが、それは別の問題です。

于 2014-02-20T17:14:01.037 に答える