我有一个模板类,我正在为一个项目工作,它的行为有点像C ++ STL中的一个容器类,但我遇到了一些问题,找出一个好的安全方法来实现它。
一些背景知识:我正在尝试将一个名为Artemis的现有项目(实体系统框架)从Java移植到C ++。有一个名为bag的类,它本质上是一个ArrayList,但是它包含的项目存储在数组中,并使用索引查找以便更快地访问,存储的元素大部分存储它们自己的索引,但这并不重要。 / p>
问题:好的,所以我有一个包含T数组(模板类型)的模板类。我的问题是T元素的返回。在我的T &Get(int index)
函数中,我想返回对给定索引处元素的引用,但是如果该元素不存在,我不知道该怎么做。我想返回类似null的东西,但这不起作用,因为T
的类型不能保证是一个指针。我可以让容器类包含T*
s,但是我会遇到一些奇怪的问题/复杂的int和非指针(std::string
)以及一些超出范围的项目(除非我复制了值?)。
有人有任何想法或知道内置STL容器如何解决这些问题? 我希望我明确表达了我的要求......
链接:
文件我正在移植
提前谢谢。
答案 0 :(得分:4)
标准关联容器(map
,unordered_map
等)在使用[]
语法时创建一个默认构造的对象,并返回对该语法的引用。
您可以这样做,也可以在元素不存在时抛出异常。标准关联容器具有执行此操作的at
函数。
另一种方法是使用类似标准容器的find
函数的函数,该函数将迭代器返回给元素而不是对元素的引用。如果元素不存在,则返回的迭代器等于end(container)
。这样,您可以实际检查元素是否存在而不使用异常。