无效的协变返回类型,嵌套类C
invalid covariant return type, nested class c++
我有一个一级A,其中包含带有虚拟方法的迭代器嵌套类:
template <typename T >
class A {
public:
class iterator {
public:
virtual ~iterator() {};
virtual T& operator++();
};
virtual iterator begin() const = 0;
};
我有第二类B,覆盖虚拟方法:
template <typename T >
class B : public A<T> {
public:
class iterator : A<T>::iterator {
T& operator++() override {
iterator p(*this);
return p; //for exemple
}
};
iterator begin() const override {
return iterator(this);// for exemple
}
};
但是当我使用B类时:
B<int> test;
我有这样的东西,汇编错误:
error: invalid covariant return type for 'B<T>::iterator B<T>::begin() const [with T = int]'
error: overriding 'B<T>::iterator V<T>::begin() const [with T = int]'
如何在B类中实现迭代器?
共同变异的返回类型有几个约束,需要根据[class.virtual]/8。
覆盖功能的返回类型应与 覆盖功能的返回类型或与 功能类。如果功能D :: F覆盖功能 b :: f,如果函数的返回类型是协变量的 满足以下标准:
- 两者都是类的指针,两者都是对类的lvalue引用,或者两者都是对类的rvalue参考
- 的类型
b :: f的返回类型中的类与d :: f的返回类型中的类是同一类,或者是明确的 返回中的类的可访问的直接或间接基类 D :: f
[...]
您的不公开继承,因此无法访问基础。而且您没有返回指针或参考。
返回具有价值语义的类型很好!你不应该放弃这一点。您可以用Pimpl Idiom替换尝试共同返回类型的尝试。让iterator
通过指针管理多态性的"迭代实现"类。
相关文章:
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- 用于返回嵌套类类型的作用域解析运算符
- CRTP - 嵌套叶类类型的可见性
- 如何在模板类中使用嵌套的结构/类类型作为返回值
- 无效的协变返回类型,嵌套类C
- 访问嵌套模板类型
- 嵌套模板类型的别名
- 传递具有依赖嵌套参数类型的模板模板参数时出错
- 嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法
- C++嵌套类函数返回类型和命名空间
- 嵌套指针类型在iterator_traits有什么用?
- 嵌套成员类型识别
- 如何设计嵌套类类型相同的嵌套模板类
- 将模板专门化为嵌套类类型
- 嵌套模板类型铸造
- 带嵌套类的链表:如何在声明嵌套类类型之前使用它
- 在c++中,如何在另一个嵌套类中使用嵌套类类型(两个嵌套类在同一个外部类下)
- 不能在嵌套模板类型之间转换
- 析构函数如何删除嵌套堆栈类型
- 嵌套模板类型定义