увеличить параметры программы parse_config_file - PullRequest
2 голосов
/ 09 октября 2011

Я хочу сохранить настройки (в файле) моего приложения в режиме boost program_options

Это моя функция

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]'

Как я могу решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 09 октября 2011

boost :: program_options Цель состоит в том, чтобы передать параметры в вашу программу.

Если вы хотите сохранить конфигурацию, которую может написать программа, вы можете использовать Boost.PropertyTree или Qt QSettings класс.

1 голос
/ 08 ноября 2014

По моему мнению, это не проблема Boost - в данном случае это проблема приведения строки Unicode в windows: имя файла windows должно быть строкой ANSI.Вам нужна помощь Boost с <char>, если вы используете опцию кодировки Unicode в Visual Studio.

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);
}
1 голос
/ 04 сентября 2013

У меня была такая же проблема с 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>();
...