1

アプリケーションには、 と の 2 つのオプションがありaますfilefile位置オプションです。と の両方afilestring 型の引数があり、省略できます。(両方に暗黙の空の文字列を設定しました)。

望ましい動作は次のとおりです。

  1. $ program->file: ""

  2. $ program file.txt->file: "file.txt"

  3. $ program --a->a: "", file: ""

  4. $ program --a file.txt->a: "", file: "file.txt"

  5. $ program --a x file.txt->a: "x", file: "file.txt"

ただし、オプション 4 は と解釈されa: "file.txt", file: ""ます。このあいまいな状況を解決する方法について program_options に通知する方法はありますか? ($ program --a -- file.txt期待どおりに動作しますが、余分なものなしでこれを動作させたいと思います。)現在、空の文字列を使用して「指定されていない」ことを示していますが、これは要件ではありません。

4

2 に答える 2

0

POだけでなく、ユーザーでさえそのような行動に混乱すると思います。特にファイルに暗黙の値がある場合、--aなしで指定できない理由がわかりませんか? file必須ではない位置オプションの暗黙的な空のファイル名の目的は何ですか? 思いつきません。

POにパーサーを与えることでロジックを実装できます。これはドキュメントに記載されています。また、最も簡単な方法として、 がfile渡されない場合、解析後に引数を手動で変更できます。

于 2012-07-21T22:18:47.823 に答える
0

次のように指定されafile場合に引数を手動で移動することで問題を解決しました。a

// Fix argument precedence
if (!vm.count("file") && vm.count("a"))
{
    vm.insert(std::make_pair("file", vm.at("a")));
    vm.at("a").as<std::string>() = std::string();
}
于 2012-08-01T17:56:59.183 に答える