我正在使用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)
我做错了什么?
答案 0 :(得分:1)
尝试使用支持Unicode的default_value方法时,我得到完全相同的错误。但是,在查看Boost源代码之后,似乎program_options中的Unicode支持是不完整的(无论是使用它还是必需的文档)。似乎使用implicit_value和/或default_value方法实际上与错误无关;相反,它是使用w值与价值。
答案 1 :(得分:0)
这实际上是boost::lexical_cast< std::string, std::wstring >
的错误。我刚刚为此here创建了错误提示。现在,您可以使用带有2个参数的重载并自己提供文本表示。这也适用于default_value
方法。