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

时间:2015-08-09 19:01:20

标签: c++ c++11 inheritance

不确定这是否是描述它的正确方法,但我想定义一个超级(抽象)类,并且几个类将继承该类。问题是我希望超类为子类定义静态成员变量集。但它们不是超级类的 static 。 例如,

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

如果我这样做:

class abstractExchangeClient{
    static double fee;
}

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

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

2 个答案:

答案 0 :(得分:1)

您不能为超类中的每个子类声明静态数据。你可以通过在超类中定义静态数据的结构然后在每个子类中声明静态数据来实现类似的东西:

class abstractExchangeClient{
    struct SData {
        // define your common static data here
    };
};

class aExchangeClient: public abstractExchangeClient{
    static SData s_data;
};

class bExchangeClient: public abstractExchangeClient{
    static SData s_data;
};

答案 1 :(得分:1)

那么您希望每个派生类都有一个静态数据成员吗?我认为这是应用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;
};

我认为只有在基类中实现这一点的合理方法。