嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法
Syntax for Function Return Type in a Header File for a Nested Template Class Return Type in 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
}
希望这有帮助。
相关文章:
- 如何获取std::result_of函数的返回类型
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 为什么返回类型中需要typename?C++
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- AcquireCredentialsHandleA() 返回 PFX 文件的0x8009030e(安全包中没有可用的凭据
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 推导 std::vector::back() 的返回类型
- 在 c++ 中将函数返回类型指定为模板参数
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- 为什么在.h中定义的私有结构需要.cpp文件中的返回类型中的范围
- 嵌套模板类返回类型在 C++ 中的头文件中函数返回类型的语法