相关疑难解决方法(0)

存储设置的最佳做法

我有一个相当大的C++应用程序(在Windows上,没有计划其他平台),它目前存储Windows注册表中的所有设置(甚至某种地址).

有时这很不方便,因为用户在更改注册表中的条目时遇到困难.我想设置版本,因此设置始终与当前代码匹配.目前我们对reg-files进行了版本控制,但是如果所有的reg文件都已添加到目标计算机上,那么您永远不会确定.使用C#,您可以在app.config中定义默认值,但不要覆盖现有设置.我不知道,如果C++存在这样的机制或库.

我想拥有以下"功能":

  • 设置可以进行版本控制
  • 目标机器上的简单更新(可由用户完成)
  • 确保在更新时仅添加新设置,并且不会使用默认值覆盖现有设置
  • 简单更改用户的设置
  • Win XP和Win 7下的相同工作流程

据我所知,在Windows上存储设置有3种可能性:

  • 注册处
  • Ini文件
  • XML文件

我们套件中只有一个应用程序目前使用Qt,但Boost可用.

对于地址,我们会将它们放在某种XML地址簿中,但对于其他设置,我们不确定,最佳做法是什么.

c++ settings visual-c++

11
推荐指数
1
解决办法
8012
查看次数

提升程序选项 - 获取部分中的所有条目

根据文档,我可以解析样式中的配置文件:

 [main section]
 string = hello world. 
 [foo]
 message = Hi !
Run Code Online (Sandbox Code Playgroud)

但我需要解析插件列表:

 [plugins]
 somePlugin. 
 HelloWorldPlugin
 AnotherPlugin
 [settings]
 type = hello world
Run Code Online (Sandbox Code Playgroud)

如何获取插件部分中的字符串向量?

c++ boost-program-options

7
推荐指数
1
解决办法
7689
查看次数

链接器找不到符号,但它们在那里?

试图编译这个cfgparser示例.

$ g++ example.cc -lcfgparser
: In function `main':
example.cc:(.text+0x6b): undefined reference to `ConfigParser_t::readFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
example.cc:(.text+0x160): undefined reference to `ConfigParser_t::getValue(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*) const'
example.cc:(.text+0x2d9): undefined reference to `ConfigParser_t::getValue(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int*) const'
example.cc:(.text+0x43c): undefined reference to `ConfigParser_t::getValue(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, double*) const'
example.cc:(.text+0x5b1): undefined reference to `ConfigParser_t::getValue(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool*) const'
example.cc:(.text+0x78c): …
Run Code Online (Sandbox Code Playgroud)

linker symbols c++11

6
推荐指数
1
解决办法
6309
查看次数

5
推荐指数
1
解决办法
2614
查看次数

如何使用Boost库读取和写入.ini文件

如何使用Boost库读取和写入(或修改).ini文件?

c++ ini boost

3
推荐指数
1
解决办法
1万
查看次数

在c ++上迭代ini文件,可能使用boost :: property_tree :: ptree?

我的任务很简单 - 我只需要解析这样的文件:

Apple = 1
Orange = 2
XYZ = 3950
Run Code Online (Sandbox Code Playgroud)

但我不知道可用密钥的集合.我使用C#解析这个文件比较容易,让我演示源代码:

    public static Dictionary<string, string> ReadParametersFromFile(string path)
    {
        string[] linesDirty = File.ReadAllLines(path);
        string[] lines = linesDirty.Where(
            str => !String.IsNullOrWhiteSpace(str) && !str.StartsWith("//")).ToArray();

        var dict = lines.Select(s => s.Split(new char[] { '=' }))
                        .ToDictionary(s => s[0].Trim(), s => s[1].Trim());
        return dict;
    }
Run Code Online (Sandbox Code Playgroud)

现在我只需要使用c ++做同样的事情.我想要使​​用,boost::property_tree::ptree但似乎我不能迭代ini文件.它很容易阅读ini文件:

boost::property_tree::ptree pt;
boost::property_tree::ini_parser::read_ini(path, pt);
Run Code Online (Sandbox Code Playgroud)

但是不可能迭代它,参考这个问题Boost程序选项 - 获取部分中的所有条目

问题是 - 在C++上编写C#代码模拟的最简单方法是什么?

c++ boost

3
推荐指数
1
解决办法
9434
查看次数

标签 统计

c++ ×4

boost ×2

ini ×2

boost-program-options ×1

c++11 ×1

linker ×1

r ×1

settings ×1

symbols ×1

visual-c++ ×1