2013-05-14 5 views
5
내가 부스트를 사용하고

:: Program_options 내 명령 줄을 구문 분석하고 다음과 같은 튜토리얼에서 일부 코드를 적용하기 :Boost.Program_options의 기본 동작과 관련된 인수가 없습니다?

try { 
    po::options_description desc("Allowed options"); 

    desc.add_options() 
     ("help,h", "output help message") 
     ("width,w", po::value<int>()->required(), " width") 
    ; 

    po::positional_options_description p; 
    p.add("width", 1); 

    po::variables_map vm; 
    po::store(po::command_line_parser(argc, argv). 
       options(desc).positional(p).run(), vm); 

    if (vm.count("help")) { 
     std::cout << "USAGE: " << av[0] << &p << std::endl; 
     return 0; 
    } 

    po::notify(vm); 

    if (vm.count("width")) { 
     std::cout << "width: " << vm["width"].as<int>() << "\n"; 
    } 
} catch (std::exception& e) { 
    std::cout << e.what() << std::endl; 
    return 1; 
} catch (...) { 
    std::cout << "Exception of unknown type!" << std::endl; 
} 

내가 인수가 전달되지 않을 때 도움을 보여주고 싶지만 내가 발견하지 않았다 argc에 의존하지 않고 variables_map의 총 인수 수를 얻는 방법.

답변

4

argc 여기로가는 길은 program_options가 설정 한 옵션 수를 표시하지 않습니다. overengineer하지 마십시오. 는 argc는 항상 최소한 도움말을 표시합니다 인수와 함께 실행 프로그램의 이름을 포함하기 때문에

+0

네 말이 맞아, 이건 공학이 끝난거야. – kittikun

9

나는

if (vm.count("help") || argc == 1) { 

을 사용했습니다.

doh ... 신경 쓰지 마라. 당신이이 솔루션을 원하지 않는다는 사실을 내가 어떻게 놓쳤는 지 확신 할 수 없습니다.