C++:如何防止私有(private)名称污染派生类型?

标签 c++ inheritance private base ambiguity

今天让我震惊的是,这段代码片段有一个模棱两可的名称引用:

class A
{
private:
    typedef int Type;
};

class B
{
public:
    typedef int Type;
};

class D : A, B
{
    Type value;//error: reference to 'Type' is ambiguous
};

唔!假设你是 A 类的作者并且您的类(class)已经被不同的人和不同的项目到处使用。有一天你决定重写你的 A类(class)。这是否意味着你不能在你的新类中使用任何新的(甚至是私有(private)的)名称而不破坏其他人的代码?

这里的约定是什么?

最佳答案

是的你是对的。如果您决定稍后进行更改,使用当前的格式/逻辑/编码风格可能会破坏其他人的代码。
尝试使用 PIMPL 或完全限定符号。
你的例子是一个很好的例子,为什么不使用完全限定符号不是一个好主意。
与以下代码相同的问题:

using namespace std;

上面的代码行可能会破坏很多东西。

关于C++:如何防止私有(private)名称污染派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61651280/

相关文章:

c++ - 在类中使用枚举时,它会是公开的吗?为什么?

types - Ada 将有限的私有(private)类型传递给任务

java - 使用信号量进行线程同步

c++ - 为未知大小的 cv::Mat 保留 vector 内存

c++ - 从 string_t 调用 Lua 函数

php - 继承中的私有(private)访问

python - 子类化 Tkinter.Text 以创建自定义小部件

c++ - 在涉及 AND 的 if 条件下避免流浪指针

使用继承时的Java动态绑定(bind)

c++ - 类继承错误: Private member