我不认为这是重复的,因为其他问题问的是为什么它是必要的,而不是我如何避免写两次。
对于类,我通常会引入成员变量,然后,无论出于何种原因,如果我不喜欢它们,很快就会删除它们。
使用非静态成员变量,我可以简单地将成员添加到头文件中并立即在我的代码中使用它。对于静态成员变量,我必须执行以下操作:
- 将新成员添加到类定义中,例如
static int a;
. - 复制新成员声明。
- 转到 .cpp 文件(如果我理解正确的话,任何 .cpp 文件都可以)。
- 将变量粘贴到文件中。
- 删除
static
关键字。 - 在类型之后、变量名称之前添加类命名空间/范围。
所有这些让我想要使所有类都可实例化,并通过对象完成所有操作,即使它没有意义。
因此,即使这只是语言的要求并且没有办法解决它,是否有办法通过以某种方式使用宏来减少重复?
我还想,如果只拥有一个包含所有这些静态成员变量定义的 .cpp 文件,可能会不会更简单。看起来(我听说)静态成员变量基本上是通过类 namespace 访问的全局变量,这是否比在每个相应的 .cpp 文件中执行它更好?
最佳答案
我将为整数类型提供一个解决方案(因为您在问题中突出显示了这些类型):
struct Foo
{
enum {Value = 123;}
};
Value
可以用作整型常量,对于 Foo
的所有实例都是相同的(类似于 static
),并且不需要在源文件中定义。请注意,尽管 &Value
没有任何意义,即不存在指向枚举值的指针之类的东西。
在后来的 C++ 标准(C++11 及以上)中,您可以使用 constexpr
执行操作,但我的方法可以说更简单,而且也是一种重要的元编程技术。
(如果这不足以满足您的需求,请投反对票,我将删除。)
关于c++ - 如何防止静态类成员变量需要两个定义/声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40758863/