反正有没有在C++中有一种虚拟静态成员?
例如:
class BaseClass { public: BaseClass(const string& name) : _name(name) {} string GetName() const { return _name; } virtual void UseClass() = 0; private: const string _name; }; class DerivedClass : public BaseClass { public: DerivedClass() : BaseClass("DerivedClass") {} virtual void UseClass() { /* do something */ } };
我知道这个例子是微不足道的,但是如果我有一个复杂数据的向量,对于所有派生类来说总是相同但需要从基类方法访问?
class BaseClass { public: BaseClass() {} virtual string GetName() const = 0; virtual void UseClass() = 0; }; class DerivedClass : public BaseClass { public: DerivedClass() {} virtual string GetName() const { return _name; } virtual void UseClass() { /* do something */ } private: static const string _name; }; string DerivedClass::_name = "DerivedClass";
这个解决方案并不能让我满意,因为我需要在每个类中重新实现成员_name及其访问器GetName().在我的情况下,我有几个成员遵循_name行为和十分之一的派生类.
任何的想法?
这是一个解决方案:
struct BaseData { const string my_word; const int my_number; }; class Base { public: Base(const BaseData* apBaseData) { mpBaseData = apBaseData; } const string getMyWord() { return mpBaseData->my_word; } int getMyNumber() { return mpBaseData->my_number; } private: const BaseData* mpBaseData; }; class Derived : public Base { public: Derived() : Base(&sBaseData) { } private: static BaseData sBaseData; } BaseData Derived::BaseData = { "Foo", 42 };