gpt4 book ai didi

c++ - 分离配置和算法代码的最佳实践

转载 作者:行者123 更新时间:2023-11-30 01:50:12 26 4
gpt4 key购买 nike

我正在用 C++ 编写一些代码来进行科学计算,我需要对自定义结构 foo 进行一些计算。为了让整个事情在未来更容易维护,我想将设置结构的代码分开,例如 foo.bar=1; 等在一个单独的文件中。如何实现?该结构使用 Armadillo 库来支持矩阵/线性代数。我已经编写了头文件 f.hpp 如下:

#include <armadillo>
#include <complex>
using namespace arma;

#ifndef __fn__
#define __fn__

struct foo
{
cx_mat a;
mat b;
cx_cube c;
complex<double> d;
string desc;
};

#endif

最佳答案

将其添加到源代码文件将要求您在每次希望更改值时都对其进行编译。这是一种不好的做法,尤其是当您的编译时间“很长”时。

推荐的方法是让配置文件说“foo.ini”。如果您使用第三方/开源库,例如 https://code.google.com/p/inih/,您可能会有一个灵活的配置文件。或 http://www.hyperrealm.com/libconfig/ .

但是,如果你想保持简单,试试这个约定:具有交替行的键值对的配置文件,具有固定的预期顺序。例如:

# foo.bar
42
# foo.pub
You're awesome
# foo.club
24/06/2015
# tab.a
64

请注意,值的顺序很重要,这将使我们更容易使用简单的 C++ 代码进行解析。只需打开文件并重复调用 getLine(),忽略每隔一行并解析第二行以将其存储到结构中。

如果你想存储一个复杂的结构,比如矩阵,你可以设计一个简单的策略来存储这样的结构,因为解析函数也是我们写的:

# Foo matrix rows
100
# Foo matrix cols
50
# Foo matrix elements, row-by-row:
0.5 3 5 23 ... ... 100
4 5 5 34 1 ... ... 100
.
.
3 33 33 2 ... ... 100

# Diagonal Matrix rows-cols
20
# Diagonal Values, row-by-row others 0
45
22
92
.
.
20

另请注意,libconfig ( http://www.hyperrealm.com/libconfig/) 允许您使用数组和类似文本的 Json 来存储和表示此类复杂的数据结构。如果您想要一个成熟的“配置语言”作为开始,您可以使用它。

而且你节省了大量的编译时间。只需更新配置文件并重新运行程序即可。这样,其他程序就可以输入配置值。

关于c++ - 分离配置和算法代码的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27814340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com