硬编码参数与文件加载的比较

时间:2012-09-04 18:41:15

标签: c++ visual-studio-2008 coding-style c++-cli

我正在研究运动控制系统,并且将至少有5个电机,每个电机都有“变速箱比率”,“每转的刻度”,“Kp”,“Ki”,“Kd”等参数。将在构建电机实例时参考。

我对StackOverflow的问题是我应该如何组织这些数字?我知道这可能是一个优先考虑的问题,但是对于编码很新,我想我可以从你那里得到一些好的意见。

我立即看到的三种方法如下:

  1. 通过变量或数字写入构造函数的调用 - PROS:有限编码,可以通过易于更改的方式实现,但可能比#define的

  2. 使用#define来完成类似的操作 - PROS:编码最少,易于更改(假设您要查看源代码)

  3. 加载文件(可能名为“motorparameters.txt”)并将参数加载到数组中并从该数组中填充。如果我真的想要我可以添加GUI方法来更改此文件而不是手动。 - PROS:最容易改变而不会深入了解源代码。

  4. 这些参数可能会随着时间的推移而发生变化,虽然公司还有其他编码人员,但我希望以一种易于配置的方式保留这些参数。你们有没有看到#define与变量的特殊好处?我已经有一个“constants.h”文件,我可以很容易地添加#defines,或者我可以在对构造函数的调用附近添加变量。

4 个答案:

答案 0 :(得分:4)

有一个原则被称为YAGNI (You Ain't Gonna Need It),它说首先做最简单的事情,然后在(如果)你的要求扩展时改变它。

答案 1 :(得分:2)

听起来像我要做的事情是:

  • 编写一个灵活的电机类,可以处理任何值(在合理范围内),即使您目前只关注5组不同的值。

  • 定义一个组件,它返回系统中5个电机的“正确”值(或者使用“正确的值”构建系统的5个电机)

  • 最初实现该组件以使用头文件中的一些硬编码值

  • 保留将来使用相同API的实现替换该组件的选项,但是从资源文件,文本文件,XML文件,与用户的GUI交互,互联网,通过以下方式读取值:对硬件进行查询以找出它认为具有的电机,无论如何。

我之所以说这是基于你通过设置一个可定制的点来最大限度地减少预期的努力,你怀疑你会想要一个(当你以后改变它时防止很多工作),但是使用最简单的东西来实现满足您当前的特定要求。

有些人可能会说实际上不值得进行输入(a)来定义组件,最好只是在main()(b)中构造5个电机来使用头文件中的常量,更好的只是输入main()中的数字文字。 (b)人们被广泛鄙视为“魔术常数”的兜售者(这并不意味着他们对实施者和未来维护者的相对总编程时间必然错误,他们可能就是这样)和(a)人们分歧意见。我倾向于认为定义这种事情需要几分钟,所以我并不关心它是否值得。从文件中加载值涉及指定一个文件格式,一旦我遇到真正的原因进行自定义,我可能会后悔,所以在需求出现之前,我个人不会为此烦恼。 / p>

答案 2 :(得分:0)

一般的想法是将代码中那些不会改变的部分分开。改变的可能性越大,就越需要让改变变得容易。

如果您正在构建一个商业应用程序,数百或数千用户将使用许多不同的电机,那么编写UI并将数据存储在配置文件中可能是有意义的。

如果这是开发代码并且这些参数不太可能改变,那么将它们填充到constants.h文件中的#defines中可能就是这样。

答案 3 :(得分:0)

如果您没有安全或IP问题,3号是一个很好的选择。无论何时您或其他人触摸您的代码,您都会引入回归的可能性。通过将您的参数保存在文本文件中,您不仅可以让自己的生活更轻松,而且还可以减少可能的错误范围。