3

假设我有两个元素容器:

std::vector<std::string> foo = { "aa", "bb", "cc" };
std::vector<std::string> bar = { "dd", "ee" };

foo我在这两个容器上运行的许多类bar之间传递了不合理的信息。但是,我发现我必须非常小心,不要混淆哪些缺陷与哪个容器相关联,有时会在此失败,然后很难找到导致的逻辑错误。

所以,假设我有两个不雅点:

int id_foo = 1;
int id_bar = 0;

是否有一种简单的设计模式可以帮助防止我尝试bar[id_foo]通过“绑定”id_foofoo.

基本上,我试图找出消除foo和之间歧义的最简单方法bar。我可以为每个类创建单独的类,然后将迭代器定义到这些类中。但是我想避免为每个我想要这种“安全性”foo的容器创建一个单独的类。bar

问题是要求诸如“索引安全”之类的东西(类似于类型安全)。我目前实现这一点的方式是通过命名我的不雅点来指示它们与哪个容器相关联。

4

2 回答 2

2

实际上并没有一种设计模式来区分索引索引的内容。有一些约定。

您可以使用 typedef 来区分它们。也就是说, typedef anint是 a FooIndex,同样对于 a BarIndex。您也可以在名称中使用一些匈牙利符号(我知道人们讨厌这样,但这种事情确实是它的本意)。您似乎已经在使用其中的一些,但没有以有用的方式使用。考虑这个命名约定:

int fooCurrentKey = 1;
int barCurrentKey = 0;

这让您知道第一个索引是针对 listfoo的,第二个是针对 list 的bar

于 2011-06-24T23:11:47.377 回答
-1

无需设置不同的类,只需使用迭代器而不是索引。它将转到适当的元素,因为它已经知道要查看哪个容器(如果需要)。

于 2011-06-24T22:11:29.420 回答