我正在尝试实现不同版本的数据结构。假设它有一个如下所示的界面(它被简化了):
template <typename T>
class Base {
public:
class Iterator {
virtual auto operator*() -> T& = 0;
};
public:
virtual auto Find(const T& value) -> Iterator = 0;
}
现在我想继承一个将实现它的类:
template <typename T>
class Derived : public Base<T> {
public:
class Iterator {
auto operator*() -> T& override {
/* ... */
}
};
public:
auto Find(const T& value) -> Iterator override {
/* ... */
};
}
问题是我需要Iterator
基于什么来实现Derived
,但是Find
函数的签名因为Derived::Iterator
(应该是Base::Iterator
)而刹车。有没有办法这样做还是我必须放弃使用接口类?