Boost程序选项parse_config_file
boost program options parse_config_file
我想在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]'
我该如何解决这个问题?
boost::program_options的目的是传递参数给你的程序。
如果你想存储一个程序也可以写的配置,你可以使用Boost。
我在Boost 1.49中遇到了同样的问题。当前的文档没有提到
basic_parsed_options<charT>
parse_config_file(const char* filename, const options_description&,
bool allow_unregistered = false);
version anymore (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>();
在我看来,这不是Boost问题-在这种情况下,它是Unicode字符串转换问题在windows: windows文件名必须是ANSI字符串。如果你在Visual Studio中使用Unicode字符集选项,你需要帮助提升<char>
。
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);
}
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- "assimp/config.h"找不到,但它在文件夹中
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- Visual Studio C++ Project File CustomBuild Task: Filter Outp
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- cmake boost find_depedency Config
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 如何在从文件中读取整数时使用 file.eof()?
- "No such file or directory" C++标头问题
- 使用 sftp_open() 使用 C++ 中的 SFTP libssh 将文件从本地复制到远程时,File 返回 N
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- typedef vector size_type in header file
- make 命令创建 .file,但不创建应用程序文件
- mingw32_gt_pch_use_address中的内部错误,在config/i386/host-mingw32.c
- 为什么 VScode 在 .h 文件中显示"'iostream' file not found"?
- 使用 C++ 显示 C:\Windows\System32\config 的内容