[英]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.