如何在C ++中引用“所有者类”?

时间:2009-05-17 21:50:18

标签: c++ class this

我的代码如下:

template<class T>
class list
{
public:
    class iterator;
};

template<class T>
class list::iterator
{
public:
    iterator();
protected:
    list* lstptr;
};

list<T>::iterator::iterator()
{
    //???
}

我想让list::iterator的构造函数使iterator::lstptr指向它所调用的列表。即:

list xlst;
xlst::iterator xitr;
//xitr.lstptr = xlst

我该怎么做?

而且,我正在引用我的迭代器构造函数,或者我应该这样做:

template<class T>
class list<T>::iterator
{
public:
    list<T>::iterator();
protected:
    list* lstptr;
};

2 个答案:

答案 0 :(得分:3)

您可以将列表传递给迭代器的构造函数:

list xlst;
list::iterator xitr(xlst);

或者,您可以创建一个迭代器工厂函数:

list xlst;
list::iterator xitr = xlst.create_iter();

在工厂功能案例中,create_iter()函数可以使用this来引用封闭列表。

答案 1 :(得分:0)

由于您不需要更改(重置)指针并且不需要NULL值,我会使用引用。您还可以在分配成员变量时使用初始化列表(如果您使用的是参考,则必须使用)。

template<class T>
class list::iterator
{
public:
    iterator( list& parent ) : lstptr( parent ){}

protected:
    list& lstptr;
};

如前所述:在list类中使用factory方法构造list :: iterator类型的对象。