2012-04-17 3 views
15

私のコマンドライン引数のいくつかにデフォルト値を使いたいです。 program_optionsにどのようなデフォルトオプションがあるのか​​を教えてください。また、ユーザーが引数を指定しない場合は私のプログラムにデフォルト値を使用するように教えてください。ブーストプログラムオプションでデフォルトの引数値を取得するにはどうすればよいですか?

は、私は robotkillは、(引数が与えられていない)3 robots have begun the silicon revolutionを生成するのに対し、3

robotkill --robots 5のデフォルト値で殺人大暴れに送信するロボットの数を指定する引数は、5 robots have begun the silicon revolutionを生成するがしたいと言います。

+1

この問題の解決方法は簡単ではありませんでしたが、どこにも記載されていないので、この質問をしました。 – flies

+0

関連:デフォルト値のオプションがユーザによって提供されているかどうかを確認する方法http://stackoverflow.com/questions/9200598/boost-program-options-with-default-values-always-present-when-using -vm-count( 'count'は動作しません。なぜなら、オプションが与えられていなくても、変数マップはデフォルト値を割り当てているので、countは決してゼロではないからです) – flies

+1

http://www.boost.org/doc/ libs/1_65_1/doc/html/boost/program_options/typed_value.html#idp698602832-bb、技術的な説明についてはhttp://www.boost.org/doc/libs/1_65_0/doc/html/program_options/tutorial.html#関連するチュートリアルの説明についてはidp419580960を参照してください。確かに、私は探して正しい名前を見つけるためにあなたの答えを使用した後にそれらを狩らなければならなかった。 – patrickvacek

答えて

18

program_optionsは、ユーザーがこれらのオプションを指定しない場合、自動的にデフォルト値をオプションに割り当てます。ユーザーが指定したオプションを指定したかどうかを確認する必要はなく、どちらの場合でも同じ割り当てを使用するだけです。

#include <iostream> 
#include <boost/program_options.hpp> 

namespace po = boost::program_options; 

int main (int argc, char* argv[]) { 

    po::options_description desc("Usage"); 
    desc.add_options() 
    ("robots", po::value<int>()->default_value(3), 
    "How many robots do you want to send on a murderous rampage?"); 

    po::variables_map opts; 
    po::store(po::parse_command_line(argc, argv, desc), opts); 

    try { 
    po::notify(opts); 
    } catch (std::exception& e) { 
    std::cerr << "Error: " << e.what() << "\n"; 
    return 1; 
    } 

    int nRobots = opts["robots"].as<int>(); 
    // automatically assigns default when option not supplied by user!! 

    std::cout << nRobots << " robots have begun the silicon revolution" 
     << std::endl; 
    return 0; 
} 
関連する問題