static variable for each derived class
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Overriding static variables when subclassing
我有一组类,这些类都是从基类派生的。这些派生类中的任何一个都声明相同的静态变量。但是它是特定于每个派生类的。
考虑下面的代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Base { // TODO: somehow declare a"virtual" static variable here? bool foo(int y) { return x > y; // error: ‘x’ was not declared in this scope } }; class A : public Base { static int x; }; class B : public Base { static int x; }; class C : public Base { static int x; }; int A::x = 1; int B::x = 3; int C::x = 5; int main() {} |
在我的基类中,我希望实现一些逻辑,这需要了解特定于派生类的
如果它是一个简单的成员变量,这不会是一个问题。然而,从语义上讲,变量实际上不是派生类实例的属性,而是派生类本身的属性。因此,它应该是一个静态变量。
更新我需要类层次结构来保留它的多态性。也就是说,所有派生类的实例都需要是公共基类的成员。
然而,如何从基类方法中获得这个变量呢?
您可以使用奇怪的循环模板模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // This is the real base class, preserving the polymorphic structure class Base { }; // This is an intermediate base class to define the static variable template<class Derived> class BaseX : public Base { // The example function in the original question bool foo(int y) { return x > y; } static int x; }; class Derived1 : public BaseX<Derived1> { }; class Derived2 : public BaseX<Derived2> { }; |
现在,类
使用虚拟getter函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | class Base { public: bool foo(int y) const{ return getX() > y; } virtual int getX() const = 0; }; class A : public Base { static const int x; int getX() const {return x;} }; class B : public Base { static const int x; int getX() const {return x;} }; class C : public Base { static const int x; int getX() const {return x;} }; int A::x = 1; int B::x = 3; int C::x = 5; int main() { C c; bool b = c.foo(3); } |