2

Boost.program_options ライブラリを使用しており、Unicode サポートで Implicit_value を指定する必要があります。

ansi-string の場合、このコードは正常に機能します

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

しかし、このようにUnicodeサポートを使用すると

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

次のエラーが表示されます。

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)

私は何を間違っていますか?

4

2 に答える 2

1

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

于 2011-11-11T06:35:46.980 に答える
0

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

于 2013-01-26T01:57:47.263 に答える