나는 구성 파일에서 매개 변수를 얻으려면 boost :: program_options를 사용하고 있습니다.거기에 부스트 프로그램 옵션에 대한 설정 파일을 인쇄하는 방법입니다
나는 파일을 손으로 만들 수 있고 프로그램 옵션이 파일을 분석 할 수 있음을 알고 있습니다. 하지만 난 프로그램을 자동으로 파일을 생성하는 방법을 찾고 있어요. 옵션의 이름을 인쇄하면 그 가치를 의미합니다. 예를 들어 :
>./main init.cfg
: 다음 텍스트 편집기를 사용하여 값을 변경하는 파일로 이동하고이 파일을 사용하는 것이이
[wave packet]
width = 1
position = 2.0
[calculation parameters]
levels = 15
과 같은 init.cfg을 생성 할 옵션없이
>./main
좋은 접근 방법은 variables_map에 operator<<
이 있어야한다는 것입니다. 이 방법은 그냥 파일에 쓸 수 있습니다. 값을 변경하십시오. 파일을 읽으십시오. 모두 동일한 형식이며 각 행을 쓸 필요가 없습니다.
설명서 또는 예제에서 그와 같은 것을 찾을 수 없습니다. 가능한 경우 알려 주시기 바랍니다
편집 : Sam Miller는 섹션에서 ini 파일을 구문 분석하는 방법을 보여 줬습니다. 그러나 boost :: program_options :: variables_map VM에서 값을 가져 오는 데는 여전히 문제가 있습니다. 내가 대신 it->second.value()
의 다음
for(po::variables_map::iterator it = vm.begin(); it != vm.end(); ++it)
{
if(it->first!="help"&&it->first!="config")
cout << "first - " << it->first << ", second - " << it->second.value() << "\n";
}
을 시도 오류를 얻었다. 나는 또한 it->second
을 시도했다. 나는 또한 오류가있어 :
icpc -lboost_serialization -lboost_program_options -c programOptions.cc
programOptions.cc(60): error: no operator "<<" matches these operands
operand types are: std::basic_ostream<char, std::char_traits<char>> << boost::any
cout << "first - " << it->first << ", second - " << it->second.value() << "\n";
^
compilation aborted for programOptions.cc (code 2)
make: *** [programOptions.o] Error 2
을 내가하는 int를 내 값의 it->second.as<int>()
전부는 아니지만을 사용하면 내가 제대로 값을 얻을 내가 이중에 도달하면, 프로그램이 충돌합니다 :
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_any_cast> >'
what(): boost::bad_any_cast: failed conversion using boost::any_cast
간단한 예를 쓸 수있는 방법이 있습니까? 또는 어떻게 할지도 로드맵을 제공합니까? –
@kirill_igum 예를 추가했습니다. –