2011-10-25 4 views
2

私はBoost.program_optionsライブラリを使用しており、Unicodeサポートで暗黙の値を指定する必要があります。 ANSI-stringにBoost.program_options:暗黙の値とUnicodeの結果がコンパイル時エラー

このコードは

po::options_description desc("Usage"); 
desc.add_options() 
    ("help,h", "produce help message") 
    ("-option,o", po::value<std::string>()->implicit_value(""), "descr"); 

正常に動作します。しかし、私はこの

po::options_description desc("Usage"); 
desc.add_options() 
    ("help,h", "produce help message") 
    ("-option,o", po::wvalue<std::wstring>()->implicit_value(L""), "descr"); 

のようなUnicodeのサポートを使用する場合、私は次のエラーを取得:

boost/lexical_cast.hpp(1096): error C2039: 'setg' : is not a member of 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>' 

boost/lexical_cast.hpp(1097): error C2664: 'std::basic_istream<_Elem,_Traits>::basic_istream(std::basic_streambuf<_Elem,_Traits> *,bool)' : cannot convert parameter 1 from 'base *' to 'std::basic_streambuf<_Elem,_Traits> *' 

boost/lexical_cast.hpp(1103): error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::basic_istream<_Elem,_Traits>' (or there is no acceptable conversion) 

私は何をすべきか間違っている?

+3

説明と修正については、http://stackoverflow.com/questions/6921196/in-boostprogram-options-how-to-set-default-value-for-wstringを参照してください。 –

+0

サハブ・ヤズダニ、ありがとう。 – vkrzv

答えて

1

Unicodeをサポートするdefault_valueメソッドを使用しようとすると、まったく同じエラーが発生します。しかし、Boostのソースコードを調べたところ、program_optionsのUnicodeサポートは不完全であるようです(それを使用するのに必要なドキュメントまたはドキュメント)。 implicit_valueおよび/またはdefault_valueメソッドの使用は実際にはエラーとは関係がないようです。むしろwvalueとvalueの使用です。

0

これは実際にはboost::lexical_cast< std::string, std::wstring >のエラーです。私はちょうどこのhereのエラーチケットを作成しました。今のところ、2つのパラメータを取り、あなた自身のテキスト表現を提供するオーバーロードを使用することができます。これはdefault_valueメソッドにも当てはまります。

関連する問題