我如何防止静态类成员变量需要两个定义/声明
How can I prevent static class member variables from needing two definitions/declarations?
我不认为这是重复的,因为其他问题问为什么它是必要的,而不是如何避免写两次。
经常在课堂上介绍成员变量,然后出于任何原因,如果我不喜欢它们,请不久将它们删除。
使用非静态成员变量,我可以简单地将成员添加到标头文件中,然后立即在我的代码中使用它。使用静态成员变量,我必须执行以下操作:
- 将新成员添加到类定义中,例如
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;
}
};
相关文章:
- 我希望定义两个具有相同代码的不同名称的库
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 为什么累积C++定义了两个模板
- 在两个.cpp文件之间定义全局类/结构指针
- 宏定义中的预处理器令牌两边有两个双引号
- 如何在两个不同的命名空间(但只写一次)中使用相同的标头定义,命名空间有不同的实现?
- 基于对象的两个属性的自定义比较器会引发异常
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 为什么我无法比较自定义类类型的两个向量?
- 宏的定义从一个值创建两个参数
- 错误:当定义两个带有标头文件的类时,将重新定义类
- 为什么 for 循环不能定义两个作用域的变量?
- 比较两个用户定义的类型向量
- 为什么转换涉及两个用户定义的转换功能/构造函数
- 我如何防止静态类成员变量需要两个定义/声明
- 将两个#定义混合成一个单词
- 我在编译时得到这个错误:错误LNK2019:我在main中获得两个定义的函数
- 为什么std::vector::front有两个定义?(c++)
- 为什么运算符[]有两个定义?