我如何防止静态类成员变量需要两个定义/声明

How can I prevent static class member variables from needing two definitions/declarations?

本文关键字:两个 定义 声明 何防止 静态类 成员 变量      更新时间:2023-10-16

我不认为这是重复的,因为其他问题问为什么它是必要的,而不是如何避免写两次。

经常在课堂上介绍成员变量,然后出于任何原因,如果我不喜欢它们,请不久将它们删除。

使用非静态成员变量,我可以简单地将成员添加到标头文件中,然后立即在我的代码中使用它。使用静态成员变量,我必须执行以下操作:

  • 将新成员添加到类定义中,例如static int a;
  • 复制新成员声明。
  • 转到.cpp文件(如果我理解正确的话,任何.cpp文件都会做)。
  • 将变量粘贴到文件中。
  • 删除static关键字。
  • 在类型之后和变量名称之前添加类名称空间/范围。

所有这些使我想只是使我的所有班级即时使我的所有班级都可以通过对象进行操作,即使这是没有意义的。

因此,即使这只是对语言的要求,也没有办法解决,是否可以通过以某种方式使用宏来减少重复?

我还在想,如果只有一个.cpp文件包含所有这些静态成员变量定义,那么也许不是更简单的。看到(我听说过)静态成员变量基本上是通过类名称空间访问的全局变量,这比在每个相应的.cpp文件中做的更好的想法是更好的主意吗?

我将为整体类型提供一个解决方案(因为您在问题中突出显示了这些类型):

struct Foo
{
    enum {Value = 123;}
};

Value可以用作一个积分常数,对于Foo的所有实例(不像static),并且在源文件中不需要定义。请注意,尽管&Value毫无意义,即没有指向枚举值的指针。

您可以在以后的C 标准中使用constexpr(C 11开始)做事,但是我的方式可以说是简单的,也是一种重要的元编程技术。

(如果这不足以满足您想要的东西,请删除投票,我将删除。

可能性也是在功能范围中使用static,类似于:

struct C {
    static int& a() {
        static int a_instance = 42;
        return a_instance;
    }
};