【发布时间】:2010-07-06 19:30:06
【问题描述】:
通常,我定义一个真正的全局常量(比如说 pi)的方式是将一个外部常量放在头文件中,然后在 .cpp 文件中定义常量:
常量.h:
extern const pi;
常量.cpp:
#include "constants.h"
#include <cmath>
const pi=std::acos(-1.0);
这对于真正的常数(例如 pi)非常有效。但是,在定义“常量”时,我正在寻找一种最佳实践,因为它将在程序运行之间保持不变,但可能会根据输入文件而改变。这方面的一个例子是引力常数,它取决于所使用的单位。 g 在输入文件中定义,我希望它是任何对象都可以使用的全局值。我一直听说拥有非常量全局变量是不好的做法,所以目前我将 g 存储在一个系统对象中,然后将其传递给它生成的所有对象。然而,随着对象数量的增加,这似乎有点笨重且难以维护。
想法?
【问题讨论】:
-
为什么每个对象都需要访问引力常数?只有少数模块应该关心这一点,那么为什么要如此广泛地使用它呢?
-
@jalf- 系统对象生成的每个(或几乎每个)对象都需要该对象本地计算的引力常数。
-
真的吗?我可以理解为什么 physics 对象 可能 需要它(尽管即使那样我也可能会尝试将重力计算单独考虑为这些物理对象可以使用的服务,因此它们不需要自己知道重力)。但是您的程序不仅仅包含物理对象。当然,你还有其他课程。渲染器需要知道重力吗?你的输入处理吗?记录器?
-
:) 这是一个难题——这是一个仅限 CLI 的学术物理模拟器。所以除了一些用于输出数据的记录器对象外,其余的对象都是物理对象。