如何在实例和静态作用域之间创建成员变量
How to create a member variable between instance and static scope?
我有一个新手C++问题,对此感到抱歉...
C++如果我在基类中有实例变量,则所有派生实例都会获得其自己的基本实例变量的个人副本。
现在,如果我有一个 bass 类的类变量(静态成员),那么所有派生实例都可以共享 base' 类变量。
我希望能够创建一个基本变量,该变量按派生类的实例实例化,而不是由这些派生类的派生类实例化。
这可能吗? 我该怎么做? 或者做这样的事情的最佳方法(解决方法)是什么?
所以举一个(坏的)例子:
假设我有类 A,它派生了类 B、C 和 D。我也有类P,它有派生类Q,R,S。
现在,我有一个配置器类。 它有许多依赖于配置器类的实例变量的花哨函数。 我喜欢 A 和 P 从配置器类派生,该类存储了 A 和 P 的单独配置。 这样,B,C,D共享一个通用配置,而Q,R,S共享自己的独立配置。
但是,Configurator 类将为 B、C、D 和 Q、R、S 创建单独的配置实例,因为它的编写方式。
因此,无论如何,最好让 Configurator 类包含由派生类而不是每个实例实例化的成员变量。
谢谢!
显而易见的方法是使用组合,而不是继承。这样,A 和 P 中的每一个都有自己的静态配置,在各自的派生类之间共享。
class A {
public: static Configurator config;
};
class P {
public: static Configurator config;
};
class B : public A {};
class C : public A {};
class Q : public P {};
class R : public P {};
一种不太明显的方法是使用 CRTP。
template <class Derived> class Configurator {
public: static int configValue;
};
class A : public Configurator<A> {};
class B : public A {};
class P : public COnfigurator<P> {};
class Q : public P {};
如果我
理解正确,你想要一个变量,它在同一类的所有实例中是"静态的",但即使一个是从另一个派生的,它在不同的类之间也有所不同。
解决方案是在基类上定义一个函数,该函数返回静态变量的值,如下所示:
class Base {
int &static_var() {
static int myvar = 42;
return myvar;
}
};
class Derived: public Base {
int &static_var() {
static int myvar = 17;
return myvar;
}
};
这样你应该有:
Base b;
b.static_var(); // should be 42
Derived c;
c.static_var(); // should be 17
相关文章:
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 如何在进程之间创建双向通道?
- 创建变量之间的运算符排列
- r-在Rcpp和C++之间转换矢量(使用Rcpp::as或Rcpp:::wrap)是否会创建一个新的矢量并复制元素
- Qml - c++ 类和 QmlRegisterType 创建的类之间的交换日期
- 如何使用C#或C 之间创建文本框之间的链接
- 我正在尝试在下划线之间创建空格,这代表一个秘密短语
- Qt在文件夹之间创建链接
- 在屏幕上拼接的字符之间创建空格 - SDL
- 在C和我的语言之间创建FFI
- 如何在 OSX 上使用 glfw3 在 OpenGL 和 OpenCL 之间创建共享上下文
- 在线程之间创建'synchronization point'
- 在安卓和PC之间创建Wifi点对点连接
- 如何在 Visual Basic DLL 和 C++ DLL 之间创建隔离/无注册的 COM
- ZeroMQ 在节点之间创建消息缓冲区
- 如何获取Qt中两个QDatetime之间创建的所有文件的文件路径?
- 在ns3中的两个节点之间创建无线链路
- Ncurses:在列之间创建填充空间
- 如何在实例和静态作用域之间创建成员变量
- 如何在 VS 版本之间创建一致的 dll 二进制文件