gpt4 book ai didi

c++ - 如何在实例和静态范围之间创建成员变量?

转载 作者:行者123 更新时间:2023-11-30 02:57:31 25 4
gpt4 key购买 nike

我有一个新手 C++ 问题,对此感到抱歉......

在 C++ 中,如果我在基类中有实例变量,所有派生实例都会获得它们自己的基实例变量拷贝。

现在,如果我有一个 bass 类的类变量(静态成员),那么所有派生实例都可以共享基类变量。

我希望能够创建一个基变量,该变量根据派生类的实例进行实例化,而不是由这些派生类的派生类的实例进行实例化。

这可能吗?我该怎么做?或者做这种事情的最佳方法(解决方法)是什么?

举个(不好的)例子:

假设我有类 A,它有派生类 B、C 和 D。我也有类 P,它有派生类 Q、R、S。

现在,我有一个 Configurator 类。它有许多依赖于 Configurator 类的实例变量的奇特功能。我喜欢 A 和 P 派生自 Configurator 类,该类为 A 和 P 存储单独的配置。这样 B、C、D 共享公共(public)配置,而 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 {};

关于c++ - 如何在实例和静态范围之间创建成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14563695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com