2012-06-16 3 views

답변

10

부스트 프로그램 옵션 설정 파일의 경우 라인이 섹션을 선언하지 않는 경우 (예 : [settings]) name=value 형식이어야합니다. 귀하의 예를 들어, 다음과 같이 쓰기 :

[plugins] 
name = somePlugin 
name = HelloWorldPlugin 
name = AnotherPlugin 
[settings] 
type = hello world

플러그인의 목록은 지금 multitoken 옵션이 될 필요가있는 "plugins.name"옵션에 해당합니다.

#include <boost/program_options.hpp> 
#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 

int main() 
{ 
    namespace po = boost::program_options; 

    typedef std::vector<std::string> plugin_names_t; 
    plugin_names_t plugin_names; 
    std::string settings_type; 

    // Setup options. 
    po::options_description desc("Options"); 
    desc.add_options() 
    ("plugins.name", po::value<plugin_names_t>(&plugin_names)->multitoken(), 
        "plugin names") 
    ("settings.type", po::value<std::string>(&settings_type), 
         "settings_type"); 

    // Load setting file. 
    po::variables_map vm; 
    std::ifstream settings_file("settings.ini" , std::ifstream::in); 
    po::store(po::parse_config_file(settings_file , desc), vm); 
    settings_file.close(); 
    po::notify(vm);  

    // Print settings. 
    typedef std::vector<std::string>::iterator iterator; 
    for (plugin_names_t::iterator iterator = plugin_names.begin(), 
             end = plugin_names.end(); 
     iterator < end; 
     ++iterator) 
    { 
    std::cout << "plugin.name: " << *iterator << std::endl; 
    } 
    std::cout << "settings.type: " << settings_type << std::endl; 

    return 0; 
} 

다음과 같은 출력을 생성합니다 : 아래

는 settings.ini 파일에서 위의 설정을 읽어들이는 예제 프로그램입니다

plugin.name: somePlugin 
plugin.name: HelloWorldPlugin 
plugin.name: AnotherPlugin 
settings.type: hello world
+0

감사합니다, 그래서 방법이 아닌 방법 플러그인 이름 앞에 "name ="이 없어도됩니까? – user1307957

+0

고객 파서를 작성하지 않아도됩니다. –

+0

알았어, 신경 쓰지 마. – user1307957