첫 예제를 따라 쳐봤다 -_-
boost::program_options 사용이다.
책에서는 부스트 버전 1_53_0인데, 난 1_63_0이다. 그래도 문제 없이 잘 했음.
예제를 따라치면서 주의 사항이 있었음 -_-
1. "oranges,o" 부분 , 뒤에 공백 있으면 안됨...
("oranges,o", opt::value<int>(), "how many oranges do you have") 이 부분 따라칠때, 모르고 습관적으로 공백 넣었다가 에러 만났음.
2. 파일을 미리 생성해서 값을 입력해놔야 함. 책에서 정확하게 파일을 꼭 만드시오! 부분이 없어서 그냥 코드만 치고 실행 했다가 에러 만났음.
실행파일이 있는 폴더에 config.ini 파일을 생성해야 한다.
3. 책 예제에는 parse_config_file 에 바로 실행될 텍스트 파일의 이름을 적는데, 없으면 이셉션 날린다 -_- ifstream으로 하면 이셉션은 안난다...
desc.add_options() 함수 사용한거 보면 짱 신기하다
.이나 -> 등 없이 계속 () 안에다가 입력만 하면 되는데... 신기해서 헤더파일 들어가봤더니, 다 operator() 해놨더군. 깔끔하다
그리고 코드에서 보면 parse 관련 함수가 2개 있다! 커맨드라인이랑 컨피그파일 읽어오는 부분
opt::store(opt::parse_command_line(argc, argv, desc), vm);
opt::store(opt::parse_config_file<char>(ini_file, desc, true), vm);
명령 실행창에 인자값 모두 입력하면 parse_command_line에서 입력한 vm값이 나오고
입력 안하면 config 값 읽어서 저장된 값 불러온다.
vm에는 순서대로 입력되는거 같다. 두개 실행 순서 바꿔주면 커맨드라인 입력해도 config값 뿌려준다.
opt::store 함수는 parse 해서 나온 값을 vm에 저장해준다.
notify 는 뭐하는놈인지 모르겠음.
vm.count 함수는, 커맨드라인에 입력 했을때 해당하는 옵션키가 들어왔는지 체크해준다.
예를 들어서 >실행파일.exe --help 라고 입력하면
1 = vm.count("help"); 값은 1 반환 된다.
와 ㅡ ㅡ 책에 딱 사용 할 수 있게 코드만 쭈르륵 적어놓고
각 함수마다 뭐하는놈인지 설명 1도 없다
ㅋㅋㅋ - - 한줄한줄 다 찾아봤네
졸라 친절하게 마지막줄에 링크 하나 줬더라. 저기서 찾아보라고 ㅗㅗㅗㅗ 나쁜놈들
http://www.boost.org/doc/libs/1_53_0/doc/html/program_options.html
복붙이 필요하신분들을 위해 코드 남겨 놓겠음
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <boost/program_options.hpp>
#include <boost/program_options/errors.hpp>
namespace opt = boost::program_options;
int main(int argc, char* argv[])
{
opt::options_description desc("all options");
desc.add_options()
("apples,a", opt::value<int>()->default_value(10), "how many apples do you have")
("oranges,o", opt::value<int>(), "how many oranges do you have")
("name", opt::value<std::string>(), "your name")
("help", "produce help message");
opt::variables_map vm;
opt::store(opt::parse_command_line(argc, argv, desc), vm);
opt::notify(vm);
if (vm.count("help")) {
std::cout << desc << "\n";
return 1;
}
try {
std::ifstream ini_file("config.ini");
opt::store(opt::parse_config_file<char>(ini_file, desc, true), vm);
std::cout << "try" << "\n";
}
catch (const opt::reading_file& e)
{
std::cout << "Failed to open configuration file 'config.ini':" << e.what();
}
opt::notify(vm);
if (vm.count("name")) {
std::cout << "Hi," << vm["name"].as<std::string>() << "\n";
}
std::cout << "Fruits count: " << vm["apples"].as<int>() + vm["oranges"].as<int>() << "\n";
return 0;
}
책 제목 - > 부스트라이브러리예제로배우는 boost c++ 애플리케이션 개발
'프로그래밍 > boost' 카테고리의 다른 글
boost::variant (0) | 2017.02.17 |
---|---|
boost::any (0) | 2017.02.17 |
boost 책 질렀다! (0) | 2017.02.16 |