【发布时间】:2012-03-28 16:55:20
【问题描述】:
我不断发现我经常希望为程序设置一组“全局”参数——不同文件中的许多不同类使用的变量分别编译。我想将这些参数放在一起,简洁且易于访问,例如
namespace Params {
static int WindowHeight = 600;
//...etc.
};
但是,如果将其包含在 a.o 和 b.o 中,“静态”会使这些变量成为每个 .o 文件的本地变量,而不是让它们共享,并且放弃“静态”会导致多个定义。 另一种选择是创建一个静态类,如
class Params {
public:
static int WindowHeight;
//...etc.
}
但是你必须在别处单独初始化参数:
int Params::WindowHeight = 600;
这是我非常想避免的。 我什至会接受以下内容(顺便说一句,这对我不起作用)
namespace Params {
static int WindowHeight
#ifdef __MUST_INIT_PARAMS
= 600
#endif
;
};
只要每个条目都可以保存在一个地方。
有什么想法吗?任何形式的帮助都会很棒! 谢谢!
【问题讨论】:
-
作为整数类型的静态类成员(如上面的示例)可以内联初始化。 (例如静态 int WindowHeight = 600; )
-
我认为这仅在某些编译器中是正确的,因为我的 gcc 抱怨。
error: ISO C++ forbids in-class initialization of non-const static member ‘var’我想它必须是一个常量,但这对我不起作用。 -
@StokedOver9k - 他的意思是“作为整数类型的静态 const 类成员”。
-
@Rob - 你当然是对的。你的心灵感应能力太棒了:-)
标签: c++ namespaces include