2011-08-03 18 views
5

Mój kod poniżej nie działa:W Boost :: Program_Options, jak ustawić wartość domyślną dla Wstring?

wstring config_file; 
// Declare a group of options that will be 
// allowed only on command line 
po::options_description generic("Generic options"); 
generic.add_options() 
    ("help,h", "produce help message") 
    ("config,c", po::wvalue<wstring>(&config_file)->default_value(L"DXDrv.cfg"), "name of a file of a configuration.") 
    ; 

Kompilacja nie powiodła się z powodu błędu:

d:\repo\a4x_ext\minidxdriver\testapp\configparser\boost\lexical_cast.hpp(1096) : error C2039: 'setg' : is not a member of 'boost::detail::lexical_stream_limited_src<CharT,Base,Traits>'

+0

Która część nie działa? Czego się spodziewałeś? Teraz nie jest jasne, o co chodzi. –

+0

Zaktualizowałem swój post z komunikatem o błędzie. Czy możesz pomóc mi pokazać przykład pracy? Dziękuję bardzo za komentarz! –

+0

Czy wystąpił błąd odwzorowania instancji szablonu na podstawie błędu kompilacji? – Pete

Odpowiedz

10

rozwlekły Wyjaśnienie: To dlatego, że leżące u typed_value wpisz program_options próbuje zrobić leksykalny obsady z wchar do char w ustawieniu prywatnego członka m_default_value_as_text. Z dowolnego powodu typ basic_string nie ma niezbędnych funkcji do tworzenia poprawnych typów szablonów.

Na szczęście klasa typed_value ma drugie zastąpienie wartości default_value i implicit_value, które zapewnia ciąg znaków reprezentujący wartość. Pomija to leksyche_cast, który rozwiązuje problem. Coś jak:

 tvalue<tstring>()->default_value(_T("output.png"), "output.png") 
+1

Dlaczego opcje program_robniejące zawracają sobie głowę konwersją wartości domyślnej na ciąg znaków? Kto tego potrzebuje? – Syncopated

+0

Właśnie uświadomiłem sobie odpowiedź. opcje_programu muszą pokazywać wartość podczas drukowania komunikatu pomocy. – Syncopated

+0

Doskonały post! Mam takie samo pytanie jak Syncopated. Każdy pomysł, dlaczego potrzebuje wąskiego ciągu dla wartości domyślnej, gdy wartością wyjściową jest wvalue ? Czy ma to związek z komunikatem pomocy? – namezero

Powiązane problemy