【发布时间】:2015-07-02 09:28:56
【问题描述】:
我有这样的代码:
#include <stdio.h>
class AbstractIterator{
virtual void do_something() = 0;
};
class AbstractList{};
class Iterator : public AbstractIterator{
public:
Iterator(const AbstractList & list) : list(list){};
virtual void do_something() override{
printf("hello\n");
};
const AbstractList & list;
};
class List : public AbstractList{
public:
Iterator getIterator(){
return Iterator(*this);
}
};
int main(int argc, char** argv){
List list;
Iterator it = list.getIterator();
it.do_something();
return 0;
}
这可行,但我想将 getIterator() 方法“推送”到 AbstractList 类。为此,需要能够做到以下几点:
/* non const */
AbstractIterator &it = list.getIterator();
it.do_something();
如果没有动态分配,这是否可能以某种方式完成?
【问题讨论】:
-
您要解决什么问题?为什么首先需要
AbstractList? -
是的,我需要它。这是非常大的代码的一部分,为了更容易理解,我只是将问题隔离开来。
-
您将如何使用动态分配来做到这一点?我看不出这与动态分配有何关系。
-
@tobi303 - 我可以通过 Java 方式实现 - list.getIterator() 使用 return (AbstractIterator *) new Iterator(*this) 或者它可能返回智能指针以避免显式删除
-
“是的,我需要它。”没有回答他的问题。真的很难知道你想要实现什么。您的迭代器看起来不像迭代器,并且列表看起来也不像列表,因此您必须解释它是关于什么的,或者您使您的最小可编译示例真正minimal
标签: c++ c++11 reference return