boost 에서 program_options 사용할때 조건부 config 읽기

jinserk의 이미지

예를 들어서 다음과 같은 config 파일이 있다고 할때,

num = 2
 
[a0]
x = 0
y = 1
z = 2
 
[a1]
x = 0
y = 1
z = 2

num = 3 이면 [a0] [a1] [a2] 등으로 그룹 갯수가 늘어나는 config 파일이라고 가정할때
boost::program_options 로 이런 파일을 어떻게 읽을 수 있을지 궁금합니다.

boost::program_options 에서는 options_description 내에 지정하지 않은 옵션들이 config 파일의
옵션에 있는 경우 unknown option exception 을 발생시키더군요.
궁리끝에 이 exception 을 이용하면 되겠다 싶어 다음과 같이 코딩을 해봤습니다.

fstream file("config.txt", fstream::in);
 
boost::program_options::options_description desc;
boost::program_options::variables_map vm;
 
try {
    desc.add_options()
        ("num", boost::program_options::value<int>(&num), "number")
        ;
 
    boost::program_options::store(boost::program_options::parse_config_file(file, desc), vm):
}
catch (exception& e) {
    int num;
    if (vm.count("num")) {
        num = vm["num"].as<int>();
 
        for (int i = 0; i < num; i++)
 
         // desc options adding
 
    store again .......
}

뭐 이런식으로 진행해보려고 했는데, store 할때 exception 이 발생하면 vm 에 해당 값이 저장이 안되더군요.

어떻게 하면 좋을지 조언 부탁드립니다.
감사합니다.