Boost.program_options: implicit_value и Unicode приводят к ошибке времени компиляции

Я использую библиотеку Boost.program_options и мне нужно указать implicit_value с поддержкой Unicode.

Для ansi-строки этот код работает нормально

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)

Что я делаю неправильно?


person vkrzv    schedule 25.10.2011    source источник
comment
См. stackoverflow.com/questions/6921196/ для объяснения и исправления.   -  person Sahab Yazdani    schedule 18.12.2011


Ответы (2)


Я получаю точно такие же ошибки при попытке использовать метод default_value с поддержкой Unicode. Однако после просмотра исходного кода Boost оказалось, что поддержка Unicode в program_options является неполной (либо это, либо документация, необходимая для ее использования). Кажется, что использование методов implicit_value и/или default_value действительно не имеет ничего общего с ошибками; скорее это использование wvalue вместо значения.

person Dave Kelly    schedule 11.11.2011

На самом деле это ошибка с boost::lexical_cast< std::string, std::wstring >. Я только что создал сообщение об ошибке для этого здесь. На данный момент вы можете использовать перегрузку, которая принимает 2 параметра и самостоятельно предоставляет текстовое представление. Это также относится к методу default_value.

person Oz.    schedule 26.01.2013