私は設定ファイルからパラメータを取得するためにboost :: program_optionsを使用しています。は、ブーストプログラムオプションの設定ファイルを出力する手段です。
私は手でファイルを作成することができ、プログラムオプションはそれを解析することを理解します。私はプログラムが自動的にファイルを生成する方法を探しています。オプションの名前とその価値を印刷することを意味します。例えば:
>./main init.cfg
:その後、私は、テキストエディタを使用して値を変更し、そのファイルに移動して、このファイルを使用することになり、この
[wave packet]
width = 1
position = 2.0
[calculation parameters]
levels = 15
のように見えるinit.cfgを生成するオプションなし
>./main
これにアプローチするいい方法は、variables_mapにoperator<<
を割り当てることです。私はこれをファイルに書き込むことができます。値を変更します。ファイルを読んでください。すべて同じ形式であり、各行を書き込む必要はありません。
ドキュメントや例にそのようなものが見つかりませんでした。可能であれば教えてください
EDIT:Sam Millerはセクション内でiniファイルを解析する方法を示しました。しかし、私はまだboost :: program_options :: variables_map VMから値を取得することに問題があります。 私は、代わりにit->second.value()
次の
for(po::variables_map::iterator it = vm.begin(); it != vm.end(); ++it)
{
if(it->first!="help"&&it->first!="config")
cout << "first - " << it->first << ", second - " << it->second.value() << "\n";
}
を試してみましたエラーを得ました。私もit->second
を試しました。私もエラーました:私はit->second.as<int>()
を使用するすべてではなく、私の値の場合、私は正しく値を取得
icpc -lboost_serialization -lboost_program_options -c programOptions.cc
programOptions.cc(60): error: no operator "<<" matches these operands
operand types are: std::basic_ostream<char, std::char_traits<char>> << boost::any
cout << "first - " << it->first << ", second - " << it->second.value() << "\n";
^
compilation aborted for programOptions.cc (code 2)
make: *** [programOptions.o] Error 2
をint型であり、私は二重に達すると、プログラムはこれでクラッシュ:
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >'
what(): boost::bad_any_cast: failed conversion using boost::any_cast
あなたは簡単な例を書くことができますか?それを行う方法をロードマップを与えるか? –
@kirill_igum例を追加しました。 –