composing() 및 implicit()으로 정의 된 옵션의 경우 boost program_options (v1_49)에 문제가 있습니다. 제 의도는 perl과 비슷한 -D 옵션을 구현하여 -D 또는 -Dname을 사용하여 여러 번 사용할 수 있도록하는 것입니다.composing() 및 implicit_value()가있는 program_options가 "작성되지 않음"
( "debug,D",
bpo::value<vector<string> >()
->composing()
->implicit_value(vector<string>(1,"1")),
"Set debug level."
),
이 대부분의 경우에서 확인을 작동하는 것 같다,하지만 값 -D 명령 줄에 나타날 때마다, 이전의 모든 값은 예를 들어, 삭제됩니다 : 내 options_description이다
$ ./a.out -D abc -D 255 -D xyz
variables_map["debug"] = {"abc", "255", "xyz"}
$ ./a.out -D -D 255 -D xyz
variables_map["debug"] = {"1", "255", "xyz"}
$ ./a.out -D abc -D -D xyz
variables_map["debug"] = {"1", "xyz"}
$ ./a.out -D abc -D 255 -D
variables_map["debug"] = {"1"}
생각 왜 이런 일이 일어나는지, 내재적 값 { "1"}은 기존 벡터를 추가하는 대신 바꿉니다. 이 작업을 수행하기 위해 할 수있는 것이 있습니까 아니면 boost :: program_options의 한계입니까?
당신은 대신'표준의 단지'표준 : string' 암시 값을 갖는 시도 할 수 있습니다 : 하나 vector'. – Xeo
암시적인 값의 유형이 값의 유형과 일치해야한다는 것은 무슨 뜻인지 확실치 않습니다. 그렇지 않으면 명령문이 컴파일되지 않습니다. – user9645
글쎄,'boost/program_options/detail/value_semantic.hpp : xparse()'에서 깨진 코드를 발견했다.'value_store = m_implicit_value;'가있는 경우'm_composing == true'에 대한 검사가 없다. 누구든지 그것에 할당하는 것이 아니라 'value_store'에 추가 할 수있는 방법을 제안 할 수 있습니까? – user9645