繁体   English   中英

C ++超类为子类定义静态成员变量

[英]c++ super class define static member variable for subclass

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

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

如果我这样做:

class abstractExchangeClient{
    static double fee;
}

那么'fee'对于abstractExchangeClient是静态的(如果错误请纠正我)。那么c ++ 11(或任何其他功能)中是否有任何功能可以实现此目的?

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

因此,您希望每个派生类都具有一个静态数据成员吗? 我认为这是应用奇怪的重复模板模式的好地方:

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;
};

我认为没有一种仅在该基类中实现此目标的合理方法。

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

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;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM