0
부스트 프로그램 옵션을 사용하여 CLI를 구문 분석합니다.Boost Program Options는 알려지지 않은 값 토큰을 자동으로 무시합니다. 왜?
내가 직면 한 문제는 CLI 앞에 '-'또는 '-'표시가없는 토큰이 있으면 라이브러리가 예외를 throw하는 대신 자동으로 무시한다는 것입니다.
try
{
options_description od;
od.add_options()
("dummy,d", value<int>()->required(), "does nothing...");
variables_map vm;
wparsed_options po = parse_command_line(argc, argv, od);
store(po, vm);
notify(vm);
cout << vm["dummy"].as<int>() << endl;
}
catch (const error& e)
{
cout << e.what() << endl;
}
일부 샘플 실행 다음과 같습니다 : 예상대로
Debug>test
the option '--dummy' is required but missing
Debug>test -d
the required argument for option '--dummy' is missing
Debug>test -d 1
1
Debug>test -d 1 asas
1
지금, 처음 세 개의 실행은 다음과
는샘플 프로그램입니다. 그러나 세 번째 실행에서 예외가 발생하지 않는 이유는 무엇입니까? 'asas'는 어떤 옵션과도 일치하지 않으며 -d는 벡터를 허용하지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 아니면 도서관은 이런 식으로 설계 되었습니까?
예상되는 동작이 나타납니다. 슬프게도 예외를 발생시킨 토큰 (또는 토큰 목록)이 예외에 포함되지 않습니다. 이렇게하면 사용자에게 표시되는 메시지가 매우 모호 해집니다. – anni
포지셔닝을 입력하면 수동으로 토큰을 포함하는 오류를 인쇄하고 인쇄 할 수 있습니다. – Riga
좋습니다. 그러나 위치 정보가 명시 적으로 언급되지 않으면 기본적으로 라이브러리가 예외를 throw 할 것으로 기대합니다. 'allow_unregistered'가 설정되어있는 경우,이 토큰을 수집해야하지만 그렇지 않다면 라이브러리는 반드시 예외를 던져야합니다. – anni