微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将私有继承的 Base 类构造函数引入 Derived 的公共范围

如何解决将私有继承的 Base 类构造函数引入 Derived 的公共范围

Inheriting a constructor from a private template class in C++ 解释说,通过 using Base::Base; 内的 Derived,我们将 Base 中注入的类型 Base 作为 Base::Base 引入 Derived 的范围,而不是实际的 { {1}} 的 c-tor(s)。 我对 Basewhys 的兴趣比上面提到的问题更深入。

在下面的代码段中,有 3 个模板类 hows,它们继承自 std::vector。我很好奇为什么 MyVector... 不足以使事情适用于 using Super::vector;private 情况?难道它不应该将 protected с-tor 带到 vector 范围的 public,从而像 MyVector... 和 {{1 等其他成员一样更改对它的访问权限吗? }}?以及为什么 at 被认为是上述有问题的类型声明,如果我们尝试将它 push_backusing Super::vector; 一起使用,它显然是指由 C2923 错误提示的构造函数。即使它是一种类型,为什么语言不像 Super::vector 那样公开访问它?

IsAType

错误 C2247:'std::vector' 不可访问 因为“MyVectorProtected”使用“protected”来继承 'std::vector'

错误 C2247:'std::vector' 不可访问 因为“MyVectorPrivate”使用“private”来继承 'std::vector'

错误 C2923:'IsAType':'std::vector::{ctor}' 不是参数 'T' 的有效模板类型参数

更新: 所以看起来真正的原因是当我们谈论构造函数时,标准忽略使用声明访问修饰符: http://eel.is/c++draft/namespace.udecl#14 http://eel.is/c++draft/namespace.udecl#16 如果我错了,请纠正我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。