std::vector的c++模板包装类
C++ Template Wrapper class for std::vector
我试图封装c++标准库的向量类使用模板,但我一直得到错误
SceneVector.h: In member function ‘void scenegraph::SceneVector<V>::print()’:
SceneVector.h:40: error: expected ‘;’ before ‘it’
SceneVector.h:40: error: ‘it’ was not declared in this scope
我创建的代码是
#include <map>
#include <vector>
#include <iostream>
namespace scenegraph
{
template <class V> class SceneVector
{
typedef std::vector<V> Vector;
Vector vector;
public:
SceneVector();
void insert(const V value);
void print();
};
template <class V> SceneVector<V>::SceneVector()
{
vector.clear();
}
template <class V> void SceneVector<V>::insert(const V value)
{
vector.push_back(value);
}
template <class V> void SceneVector<V>::print()
{
for(Vector::iterator it = vector.begin(); it != vector.end(); ++it)
{
std::cout << "[" << (*it) << "] " << std::endl;
}
std::cout << std::endl;
}
}
谁能在这里纠正我?我必须强调,我是一个c++新手,所以答案可能非常微不足道。
当访问依赖于模板参数的类型时,必须在前面加上typename
,以使解析器清楚该类型是一个类型。
for(typename Vector::iterator it = vector.begin(); it != vector.end(); ++it)
Vector::iterator有可能是编译时常量,但编译器在实例化之前无法知道。这就是为什么你必须明确告诉它
如果你有一个普通的
std::vector<V>::iterator
很明显,它是一个依赖名称,你需要一个typename
来指示迭代器是一个类型。
使用typedef并不能真正改变这一点
相关文章:
- 这个带有模板<类 Vector 的C++代码片段有什么问题>
- 简化在 Pybind11 中为 C++ 模板类生成包装类:模板声明不能出现在块范围内
- C++如何在类Vector中显示不同类型的参数
- C++-用与被包装数据相同的语法构造包装类
- C++-用和结构相同的语法围绕结构构造包装类
- C++泛型包装类,它为某些函数添加了额外的处理
- 如何减少大量包装类的实现代码?
- 在 C++ 中为 C 样式对象创建一个透明包装类
- 如何将包装类的对象用作包装函数中的参数
- 这->...在模板包装类中必需
- 无法理解包装类的构造函数的声明
- 标准向量之上的 C++11 包装类
- 编写安全包装类以管理用户定义对象的指针
- 重构现有包装类,以使用与包装器本身相同的构造函数参数包装 T
- 包装类设计和依赖注入
- 如何在我自己的类 Vector 中使用 Move 构造函数而不是 Move 赋值运算符
- 提升 Python 导入失败,未定义包装类的符号
- 简单包装类与智能指针
- 如何使包装类将其构造函数参数转发到 std::vector 的构造函数?
- std::vector的c++模板包装类