class Base {
static std::vector<std::string> filter;
virtual bool check() {
if(std::find(filter....))
}
}
class Derived : public Base {
static std::vector<std::string> filter;
bool check() override {
if(std::find(filter....))
}
}
假设两个静态变量都以各自的平移单位定义。
我有一个静态字符串向量,它在基类和派生类中带有相同的名称,因为它们只是为每个类带有不同值的相同类型的信息。我知道隐藏非虚拟函数的名称并不是一个好主意。这同样适用于静态成员变量吗?如果有的话有什么替代方案?
答案 0 :(得分:1)
是的,避免影响非虚拟功能的所有相同原因都适用于(空虚的非虚拟)成员;
我将假设Derived中的check()
覆盖在文本上与Base的覆盖相同。
您可以改为使用静态本地的虚拟方法
class Base
{
// ...
virtual /*const?*/ std::vector<std::string> & filter()
{
static std::vector<std::string> value = ...
return value;
}
bool check() // final
{
if(std::find(filter()...))
}
}
class Derived : public Base
{
/*const?*/ std::vector<std::string> & filter() // override
{
static std::vector<std::string> otherValues = ...
return otherValues;
}
}