オプションの引数が定義済みの選択肢のセット内にあるかどうかを確認する簡単な方法はありますか? ここでの「単純」とは、アドホック クラスを定義しないことを意味します。
値または--myoption
値を持たなければならないオプションがあるとします"myvalue1"
"myvalue2"
たとえば、Pythonでは、optparse のchoices オプションを使用すると非常に簡単です。
オプションの引数が定義済みの選択肢のセット内にあるかどうかを確認する簡単な方法はありますか? ここでの「単純」とは、アドホック クラスを定義しないことを意味します。
値または--myoption
値を持たなければならないオプションがあるとします"myvalue1"
"myvalue2"
たとえば、Pythonでは、optparse のchoices オプションを使用すると非常に簡単です。
今気付いたように、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()
--myoption
それが等しいか、myvalue1
またはそれからであることを確認myvalue2
することは、関数呼び出しの問題になります。
相互に排他的な 2 つの位置オプションを定義できるかどうかはまだわかりませんが、それは別の問題です。