将私有继承的 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 (将#修改为@)