访问说明符和右值引用
Access specifiers and rvalue references
我有下面这段代码,它无法编译(编译器抱怨B::fn不可访问)。
#include <iostream>
using namespace std;
template<typename T>
class B
{
public:
void fn(T &&obj)
{
cout<<"base versionn";
}
};
template<typename T>
class A : public B<T>
{
private:
using B<T>::fn;
public:
void fn(const T &obj)
{
cout<<"derived versionn";
}
};
int main()
{
A<int *> a;
a.fn(new int(5));
}
为了使代码工作,我似乎可以
- 在派生类中定义一个单独的
void fn(T &&obj)
,或者 - 使继承私有,并取消访问说明符
谁能解释一下为什么我现在的代码不起作用,但上面的方法可以?
[UPDATE]:我知道B::fn是私有的。我感到困惑的原因是class A : private B<T>
解决了这个问题。
with:
private:
using B<T>::fn;
B<T>::fn
可见,但private。用public
代替,也可以公开。
如果去掉using B<T>::fn;
, B<T>::fn
被A::fn
隐藏,因此main中的调用调用A::fn
。
相关文章:
- 激励'inline'说明符的真实世界示例?
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- 缺少类型说明符,显式类型为"缺少错误"
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- VC++ 自动说明符假定矢量的引用限定符<bool>::back的引用限定符
- C++ 两个类相互引用 错误:'ClassName'之前预期的类型说明符
- 类型说明符中允许的类型定义的C++11标准引用使用
- 标记调度、可变模板、通用引用和遗漏的常量说明符
- GCC要求此引用声明使用constexpr说明符是否正确
- 访问说明符和右值引用