0

我有一个模板类,我正在为一个行为有点像 C++ STL 中的容器类之一的项目工作,但是我在找出一种好的安全方法来实现它时遇到了一些问题。

一些背景知识:我正在尝试将一个名为 Artemis 的现有项目(一个实体系统框架)从 Java 移植到 C++。有一个名为 bag 的类,它本质上是一个 ArrayList,但它包含的项目存储在数组中并使用索引查找以便更快地访问,存储的元素大部分存储自己的索引,但这并不重要。

问题:好的,所以我有一个包含 T 数组(模板类型)的模板类。我的问题是 T 元素的返回。在我的T &Get(int index)函数中,我想返回对给定索引处元素的引用,但我不知道如果该元素不存在该怎么办。我想返回类似 null 的东西,但这不起作用,因为T不能保证 ' 的类型是指针。我可以让容器类包含T*s,但是我会遇到一些奇怪的问题/复杂的事情,比如 int 和非指针 ( std::string) 以及一些超出范围的项目(除非我复制了值?)。

有没有人有任何想法或知道内置 STL 容器如何解决这些问题?我希望我已经足够清楚我的要求......

链接:

我要移植的文件

先感谢您。

4

1 回答 1

4

当使用该语法时,标准关联容器(mapunordered_map等)会创建一个默认构造的对象[]并返回对该对象的引用。

您可以这样做,也可以在元素不存在时抛出异常。标准关联容器具有at执行此操作的功能。

另一种选择是有一个类似于标准容器函数的find函数,它返回一个迭代器到元素,而不是对元素的引用。如果元素不存在,则返回的迭代器等于end(container)。这样您就可以在不使用异常的情况下实际检查元素是否存在。

于 2012-09-28T03:41:08.540 回答