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 回答