2011-10-09 161 views
2

我想保存在升壓program_options我的應用程序的設置(文件)的方式提升程序選項parse_config_file

這是我的功能

void MainWindow::saveSettings() 
{ 
    po::options_description desc("Allowed options"); 
    desc.add_options() 
     ("ip",deImPath->text().toStdString().c_str()) 
     ("cp",deCalPath->text().toStdString().c_str()) 
     ("sp",deSolPath->text().toStdString().c_str()); 
    po::variables_map vm; 
    po::store(po::parse_config_file("settings.conf",desc),vm); 
    po::notify(vm); 
} 

不幸的是我得到這個錯誤:

error C2784: 'boost::program_options::basic_parsed_options<charT> 
boost::program_options::parse_config_file(std::basic_istream<charT> &, 
              const boost::program_options::options_description &,bool)' : 
could not deduce template argument for 'std::basic_istream<charT> &' from 'const char [14]' 

我該如何解決這個問題?

+0

@Mat your answer disappeared !! –

+0

我沒有發佈答案,有人做了並決定刪除它 - 我不知道爲什麼,但可能是因爲他們認爲它實際上沒有很好地解決您的問題。如果你想保存(但我不知道提升),你調用一個叫做'parse_config_file'的東西有點奇怪。 – Mat

+0

是的,我意識到了! –

回答

3

boost :: program_options的用途是將參數傳遞給你的程序。

如果要存儲程序可以寫入的配置,則可以使用Boost.PropertyTree或Qt的QSettings類。

1

我和Boost 1.49有同樣的問題。目前的文件沒有提及

basic_parsed_options<charT> 
parse_config_file(const char* filename, const options_description&, 
        bool allow_unregistered = false); 

版本不再(http://www.boost.org/doc/libs/1_54_0/doc/html/boost/program_options/parse_config_f_idp87054352.html)。我解決了這個問題,一個std :: ifstream的這樣

po::variables_map options; 
po::options_description desc; 

desc.add_options() 
("max_processing_time",   po::value<double>()->required(),  "Maximum processing time") 
("min_processing_time",   po::value<double>()->required(),  "Minimum processing time") 
("relative_range_of_due_dates", po::value<double>()->required(),  "RDD Relative Range of Due Dates") 
("tardiness_factor",   po::value<double>()->required(),  "TF Tardines Factor") 
("number_of_jobs",    po::value<unsigned int>()->required(), "Number of jobs"); 

std::ifstream file(filename.c_str()); 
po::store(po::parse_config_file(file, desc), options); 
file.close(); 
po::notify(options); 

那之後,你可以用

max_processing_time_ = options["max_processing_time"].as<double>(); 
min_processing_time_ = options["min_processing_time"].as<double>(); 
relative_range_of_due_dates_ = options["relative_range_of_due_dates"].as<double>(); 
tardiness_factor_ = options["tardiness_factor"].as<double>(); 
number_of_jobs_ = options["number_of_jobs"].as<unsigned int>(); 
1

訪問值由我看來,這不是升壓問題 - 在這種情況下,它是Unicode字符串偏色問題在Windows上:Windows文件名必須是ANSI字符串。如果您在Visual Studio中使用Unicode charset選項,則需要使用<char> Boost。

void MainWindow::saveSettings() 
{ 
    po::options_description desc("Allowed options"); 
    desc.add_options() 
     ("ip",deImPath->text().toStdString().c_str()) 
     ("cp",deCalPath->text().toStdString().c_str()) 
     ("sp",deSolPath->text().toStdString().c_str()); 
    po::variables_map vm; 
    po::store(po::parse_config_file<char>("settings.conf",desc),vm); 
    po::notify(vm); 
}