问题描述
Inheriting a constructor from a private template class in C++
解释说,通过 using Base::Base;
内的 Derived
,我们将 Base
中注入的类型 Base
作为 Base::Base
引入 Derived
的范围,而不是实际的 { {1}} 的 c-tor(s)。
我对 Base
和 whys
的兴趣比上面提到的问题更深入。
在下面的代码段中,有 3 个模板类 hows
,它们继承自 std::vector。我很好奇为什么 MyVector...
不足以使事情适用于 using Super::vector;
和 private
情况?难道它不应该将 protected
с-tor 带到 vector
范围的 public
,从而像 MyVector...
和 {{1 等其他成员一样更改对它的访问权限吗? }}?以及为什么 at
被认为是上述有问题的类型声明,如果我们尝试将它 push_back
与 using Super::vector;
一起使用,它显然是指由 C2923
错误提示的构造函数。即使它是一种类型,为什么语言不像 Super::vector
那样公开访问它?
IsAType
错误 C2247:'std::vector
错误 C2247:'std::vector
错误 C2923:'IsAType':'std::vector
更新: 所以看起来真正的原因是当我们谈论构造函数时,标准忽略使用声明访问修饰符: http://eel.is/c++draft/namespace.udecl#14 http://eel.is/c++draft/namespace.udecl#16 如果我错了,请纠正我。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)