mar*_*jno 11 c++ virtual-functions
反正有没有在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 */ }
};
Run Code Online (Sandbox Code Playgroud)
我知道这个例子是微不足道的,但是如果我有一个复杂数据的向量,对于所有派生类来说总是相同但需要从基类方法访问?
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";
Run Code Online (Sandbox Code Playgroud)
这个解决方案并不能让我满意,因为我需要在每个类中重新实现成员_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 };
Run Code Online (Sandbox Code Playgroud)