C ++中嵌套模板类返回类型的头文件中的函数返回类型的语法

本索8

我正在构建自己的向量类,类似于可以找到C ++ STL的向量。在我的头文件中,有两个类,即向量类和迭代器类,这是一个嵌套的模板类。我想知道嵌套迭代器类的返回类型的正确语法是什么。在这种情况下,对于我的代码,我正在寻找为我的begin()函数和end()函数编写正确的返回类型语法的正确方法,这两个函数都在我的向量类中。双方begin()end()都应该具有的返回类型vector <T> :: iterator,但似乎并不奏效。这是我当前代码的设置方式。

template <class T>
iterator;

/************************************************
 * VECTOR
 * A class that holds stuff
 ***********************************************/
template <class T>
class vector
{
public:
   // code removed for brevity

   // Methods of the Vector class
   vector <T> :: iterator begin();
   vector <T> :: iterator end();


private:
   // Code removed for brevity
};

/**************************************************
* VECTOR ITERATOR
* An iterator through array
*************************************************/
template <class T>
class vector <T> :: iterator
{
    // ...code removed for brevity
};

此外,对于.h文件顶部的以下两行,我是否有正确的代码?

template <class T>
iterator;

还是这个?

template <class T>
vector <T> :: iterator;

谢谢!

如果

您只需将的定义iterator移至vector

template <class T>
class vector {
public:
    class iterator {
        /* How you implement a iterator of type T */
    };

    iterator begin(); // for example

    // other fantastic stuff
};

template <class T>
vector<T>::iterator vector<T>::begin()
{
    // whatever
}

如果您不想定义iterator内部,可以这样做:

template <class T>
class vector {
public:
    class iterator; // only a declaration

    iterator begin(); // same

    // other fantastic stuff
};

template <class T>
class vector<T>::iterator {
    // the actual definition goes here
};

template <class T>
vector<T>::iterator vector<T>::begin()
{
    // same
}

另外,您也可以iterator单独定义并创建vector::iterator别名:

template <class T>
class iterator { /* real definition */ };

template <class T>
class vector {
public:
    using iterator = ::iterator<T>;
    // or typedef ::iterator<T> iterator;

    iterator begin(); // still the same

    // same fantastic stuff
};

template <class T>
vector<T>::iterator vector<T>::begin()
{
    // all the same
}

希望这可以帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章