gpt4 book ai didi

c++ - 基类和派生类中同名的静态成员变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:18 29 4
gpt4 key购买 nike

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....))
}
}

假设两个静态变量都在各自的翻译单元中定义。

我有一个静态字符串 vector ,它在基类和派生类中具有相同的名称,因为它们旨在携带相同类型的信息,只是每个类的值不同。我知道为非虚拟函数隐藏名称不是一个好主意。这同样适用于静态成员变量吗?如果可以,有哪些替代方案?

最佳答案

是的,所有避免隐藏非虚拟函数的原因都适用于(空洞的非虚拟)成员;

我将假设 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;
}
}

关于c++ - 基类和派生类中同名的静态成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41040163/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com