如何解决C++:私有继承二义性调用
在下面的代码中,公共方法 Base2::f()
预计将成为 Derived
类的私有成员,但编译器抱怨歧义。
问题是关于继承的基本理解。如果有人可以帮助阐明它,我将不胜感激。
#include <iostream>
template <typename TDerived>
class Base1 {
public:
void f() { static_cast<TDerived &>(*this)->f_impl(); }
};
class Base2 {
public:
void f() { std::cout << "f()" << std::endl; }
};
class Derived : public Base1<Derived>,private Base2 {
public:
void f_impl() { std::cout << "f_impl()" << std::endl; }
};
int main() {
Derived d;
d.f();
}
解决方法
在选择后完成可见性检查(公共/私人), 所以它是模棱两可的
这是来自 cppreference
的相关部分成员访问不影响可见性:私有和 私有继承的成员可见并被重载考虑 解析,到不可访问的基类的隐式转换是 仍在考虑等。 成员访问检查是任何之后的最后一步 给定的语言结构被解释。这条规则的意图是 用公共代替任何私人永远不会改变 程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。