1
假设我有一个基本类Object
,其中有一些int
s和std::string
s(所以不是很大)。实现一个常量对象列表
现在,我需要某种不会改变的列表Object
,但我应该仍然可以搜索它(例如使用函数)。这个“列表”仅在编译时创建,它将具有约。 60个物体。我现在有2个解决方案:
- 创建一个类
Objects
具有std::vector<Object>
和被在构造函数中初始化(与搜索功能一起)。 - 创建一个名称空间,其中包含
Objects
作为常量,std::vector<Object>
用于搜索(以及类似的)函数(将在名称空间中定义)。
1
的一个缺点是每次需要访问它时都必须创建60多个对象。 2
可能没问题,但是不要忘记将新对象放在std::vector
以及顶部“列表”中。
1
可能实现这样的:
class Objects
{
public:
Objects()
{
list.push_back(Object{ 0 });
list.push_back(Object{ 1 });
};
bool hasValue(int value)
{
for (auto& obj: list)
{
if (obj.getValue() == value)
return true;
}
return false;
}
private:
std::vector<Object> list;
};
2
像这样:
namespace Objects
{
const Object obj1{ 0 };
const Object obj2{ 1 };
const std::vector<Object> list{ obj1, obj2 };
bool hasValue(int value)
{
for (auto& obj: list)
{
if (obj.getValue() == value)
return true;
}
return false;
}
}
哪种方式是最好的编码实践和/或可用性/可维护性方面?也许还有另一种我没有想到的方式?
这取决于。 Object的特性,它有多大,会有多少,列表是否需要在运行时建立,或者是否可以在编译时计算。你能详细说明吗?也许发布一个小程序来演示用例? –