我会尽量保持我的示例代码非常简单,但是当我在现场输入时它可能会出现错误。
我有一个名为 Phone 的课程。
class Phone
{
public:
Phone(std::string manufacturer, std::string model, std::vector<Feature> features);
private:
std::vector<Features> features;
std::string model;
std::string manufacturer;
};
我有一个名为 Feature 的结构。
struct Feature
{
Feature(std::string feature, std::string category);
std::string feature;
std::string category;
};
如您所见,电话具有功能列表(矢量):即。蓝牙、GPS、收音机等,其中有一个类别:网络、导航、多媒体。
现在有关电话和功能的信息存储在 sqlite3 数据库中。我有一个辅助函数,它将从数据库中检索特定的电话模型并返回一个填充的电话对象。我还有一个函数,它接收一个电话对象并将电话写入数据库。
问题是我需要为客户提供一些迭代电话功能列表的方法。对于初学者,数据库助手需要了解这些特性,以便将它们写入数据库。其次,客户端可能需要从数据库中检索电话,然后向用户显示功能列表。
一种解决方案是在类 Phone 中添加以下函数
std::vector<Feature>::iterator begin()
std::vector<Feature>::iterator end()
这对我来说不是一个理想的解决方案,因为客户端代码看起来不直观 - 它看起来好像客户端正在迭代电话,而实际上他们正在迭代功能。
另一种解决方案在http://accu.org/index.php/journals/1527的一篇文章中进行了讨论,该文章讨论了使用名为“memberspaces”的技术将迭代器公开给客户端代码。这将导致客户端代码更具可读性,但在我看来,实现有点混乱。
迭代器问题是否有更好的解决方案,或者我可以使用更合适的设计模式。
任何反馈将不胜感激。