2011-10-25 4 views
2

Boost.program_options 라이브러리를 사용하고 있으며 유니 코드를 지원하는 implicit_value를 지정해야합니다.Boost.program_options : implicit_value 및 유니 코드가 컴파일시 오류가 발생합니다.

는 ANSI 문자열의 경우이 코드는 잘

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"); 

같은 유니 코드 지원을 사용하는 경우 :

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

Sahab Yazdani, 고마워. – vkrzv

답변

1

유니 코드를 지원하는 default_value 메서드를 사용하려고하면 똑같은 오류가 발생합니다. 그러나 Boost 소스 코드를 살펴본 후 program_options의 유니 코드 지원이 불완전한 것처럼 보입니다 (사용하기에 필요한 설명서 또는 설명서가 불완전합니다). implicit_value 및/또는 default_value 메서드를 사용하면 오류와 아무런 관련이없는 것 같습니다. 오히려 wvalue 대 value의 사용입니다.

0

실제로 이것은 boost::lexical_cast< std::string, std::wstring >의 오류입니다. 방금 here에 대한 오류 티켓을 만들었습니다. 이제는 2 개의 매개 변수를 사용하고 텍스트 표현을 직접 제공하는 오버로드를 사용할 수 있습니다. 이는 default_value 메소드에도 적용됩니다.