2011-10-09 162 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); 
}