2011-08-03 21 views
5

以下の私のコードは動作しませんでした:Boost :: Program_Optionsでは、wstringのデフォルト値を設定する方法は?

wstring config_file; 
// Declare a group of options that will be 
// allowed only on command line 
po::options_description generic("Generic options"); 
generic.add_options() 
    ("help,h", "produce help message") 
    ("config,c", po::wvalue<wstring>(&config_file)->default_value(L"DXDrv.cfg"), "name of a file of a configuration.") 
    ; 

コンパイルがエラーで失敗しました:

d:\repo\a4x_ext\minidxdriver\testapp\configparser\boost\lexical_cast.hpp(1096) : error C2039: 'setg' : is not a member of 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>'

+0

どの部分が機能していませんか?あなたは何を得ることを期待しましたか?問題が何であるかはっきりしない。 –

+0

投稿をエラーメッセージで更新しました。あなたは私にいくつかの実例を見せてもらえますか?あなたのコメントをありがとう! –

+0

コンパイルエラーからのテンプレートインスタンス化バックトレースはありましたか? – Pete

答えて

10

ロングったらしい説明:program_optionsでの基礎となるtyped_valueタイプから字句キャストを行おうとするためです〜charm_default_value_as_textプライベートメンバーを設定しています。何らかの理由で、basic_string型には正しいテンプレート型を作成するために必要な関数がありません。

幸いにも、typed_valueクラスには、default_valueの2番目のオーバーライドと、値の文字列表現を提供するimplicit_valueがあります。これは問題を解決するlexical_castをバイパスします。次のようなものがあります:

+1

なぜboost program_optionsはデフォルト値を文字列に変換するのに気をつけますか?誰がそれを必要としますか? – Syncopated

+0

私はちょうど答えを実現しました。 program_optionsは、ヘルプメッセージを印刷するときに値を表示する必要があります。 – Syncopated

+0

優秀な投稿!私はSyncopatedと同じ質問があります。出力値がwvalue のときに、デフォルト値の狭い文字列が必要な理由は何ですか?それはヘルプメッセージと関係がありますか? – namezero

関連する問題