c++ - C++ 中嵌套模板类返回类型的头文件中函数返回类型的语法
问题描述
我正在构建我自己的向量类,类似于你会发现 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
}
希望这可以帮助。
推荐阅读
- javascript - 在我将图表分离到烧瓶应用程序中的另一个目录后,脚本 src 不适用于 chart.js
- powershell - Powershell迭代文本行会引发异常
- android - Android 应用主题更换顺畅
- arrays - 百分比编码超出范围异常
- android - 我想将底部导航和广告修复到底部
- eclipse - 阻止下载 Gradle 和 Maven 依赖项
- tfs - 如何仅合并 TFS 中更改集中的选定文件
- java - java - 如何将新用户条目附加到java中的csv文件?
- mocking - 捕获 spock 返回值并用于验证
- iis - 我可以使用服务器端 blazor 进行生产吗?