c++父类(super class)为子类定义静态成员变量

标签 c++ c++11 inheritance

不确定这是否是描述它的正确方法,但我想定义一个 super (抽象)类,几个类将从它继承。问题是我希望父类(super class)为子类定义一组静态成员变量。但是它们对于父类(super class)来说不是静态的。 例子,

class abstractExchangeClient{
// Define something here
}
class aExchangeClient: public abstractExchangeClient{
}
class bExchangeClient: public abstractExchangeClient{
}

如果我这样做:

class abstractExchangeClient{
    static double fee;
}

然后“费用”对于 abstractExchangeClient 是静态的(如果错误请纠正我)。那么 c++11(或其他)中是否有任何功能可以实现这一点?

@IgorTandetnik 如果有多个共享名称的静态成员,其中一些应初始化为零,而另一些应初始化为其他值。如果我可以有一个地方为子类声明那些静态成员,并初始化它们(相应地为零或其他值)并且可能还为这些初始化步骤注销一些消息,那将是理想的。如果没有这样的机制,我不得不在每个子类中定义那些共享名称的静态变量,并且不时地进行相同的初始化。

最佳答案

所以您希望每个派生类都有一个静态数据成员?我认为这是应用 curiously recurring template pattern 的好地方:

template<typename T>
struct FeeOf {
  static double fee = 0.0;
};
struct Derived : public SomeBase, public FeeOf<Derived> {
  // not necessary, the name of the static data member
  // is already in scope.
  using FeeOf<Derived>::fee;
};

我认为没有合理的方法可以仅在该基类中实现它。

关于c++父类(super class)为子类定义静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907788/

相关文章:

C++ std::log 函数无法缩放

c++ - C++11 中的基本线程锁定

java - Scala非法继承错误没有意义

swift - Swift 结构的替代继承方法?

c++ - 如果手册中未提及,如何查找 PinPad XFS 的逻辑名称

c++ - 警告 : comparison between pointer and integer

c++ - 当列表中有两个以上的项目时,链表的函数添加会崩溃?

c++ - 编译 Audacity MSB4023 项目元数据时出错,无法应用于 MSVC 2010

c++ - lambda 函数捕获和修改自己的引用

javascript - 为什么我的 JavaScript 对象属性会被其他实例覆盖?