2017-10-30 13 views
2

나는 boost::program_options::options_description을 취하고, 몇 가지 옵션을 추가 한 다음 다시 돌려주는 함수를 가지고있다. 함수의 범위가 끝나고 내 옵션이 사라지면 내 옵션이 지속되지 않는 것처럼 보입니다. 어떻게 그들을 유지시켜야합니까? 그들이 '(함수 범위 이후에 유지할 부스트 프로그램 옵션을 얻는 것

void generic_args(boost::program_options::options_description &desc, 
        boost::program_options::positional_options_description &p) 
{ 
    // ... 
} 

현재 generic_args사본 descp 수정 :

[email protected]:~/test/test_args$ g++ -std=c++11 main.cpp -o a.out -lboost_program_options 
[email protected]:~/test/test_args$ ./a.out 
[email protected]:~/test/test_args$ ./a.out --help 
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::unknown_option> >' 
    what(): unrecognised option '--help' 
Aborted (core dumped) 
+2

제 3 자 라이브러리를 탐색하기 전에 최소한 기본 C++를 배우는 것이 좋습니다. 참조 매개 변수를 사용하십시오. –

+0

저는 파이썬 프로그래머입니다. 타사 라이브러리를 사용하면 나에게 완벽합니다. C++ 메모리 관리는 필자의 관점에서 볼 때 고급 주제입니다. :) – Scott

답변

1

당신은 참조로 인수를 위해 generic_args을 변경해야합니다 : 여기

#include <boost/program_options.hpp> 
#include <utility> 


void generic_args(boost::program_options::options_description desc, boost::program_options::positional_options_description p) { 
    desc.add_options() 
     ("input", boost::program_options::value<std::vector<std::string>>(), "input files") 
     ("help,h", "produce help message") 
     ("verbose,v", "put the pretty words and numbers on the light screen"); 

    p.add("input", -1); 
} 

int main(int argc, const char** argv) { 
    boost::program_options::options_description desc("Allowed options"); 
    boost::program_options::positional_options_description p; 
    generic_args(desc, p); 
    boost::program_options::variables_map parameters; 
    boost::program_options::store(boost::program_options::command_line_parser(argc, argv).options(desc).positional(p).run(), parameters); 
    boost::program_options::notify(parameters); 
    return 0; 
} 

출력의 값으로 전달됩니다).

자세한 내용은 Does C++ pass objects by value or reference?What's the difference between passing by reference vs. passing by value?을 참조하십시오.

+0

알았어요. 필자는 Java와 Python과 같은 언어에 익숙합니다. "큰"객체는 항상 참조로 전달됩니다. – Scott

+1

C++에 오신 것을 환영합니다. 그렇게하지 않는 한 아무 것도 참조하지 않습니다. 그리고 일단 당신이 내부화하면, 당신은 *** 그 참조가 부실 될 수 있다는 사실에 물릴 것입니다. 적어도 몇 백 번. 평생 동안 의식하고 가치 의미론을 선호하는 법을 배울 때까지. – sehe