English 中文(简体)
在C++中,我是否应当暴露变压器和改装器方法或整个集装箱?
原标题:Should I expose iterators and adaptor methods or a whole container in C++?
  • 时间:2009-09-27 17:45:59
  •  标签:

2. 审议法典的一部分:

class Foo
{ // ...
    std::vector<Bar> bars;
};

如果我暴露了整个集装箱,或者如果我暴露在<条码>上。 d 自动取款机类别和文字改编器方法(begin(),end(,size()及我需要的东西)?

如果回答是it 取决于,谁应该作出决定?

最佳回答

除非你绝对需要暴露集装箱,否则你只能暴露器或导管(和照发器类型)。

这样做可以避免在改变执行细节时打破其他守则,并遵循隐藏/封顶的信息指南。

问题回答

如果你想要遵循良好的设计线,

贵方的地图应是私人的或受保护的, 它希望

class Foo
{  
    public:
    typedef std::vector<Bar>::const_iterator FooIterator;
    FooIterator begin()
    {
      return bars.begin();
    }
    FooIterator end()
   {
    return bars.end();
   }
    protected:
    std::vector<Bar> bars;

};

int main()
{
   Foo obj;
   for(obj::FooIterator itr=obj.begin();itr!=obj.end();itr++)
  {
  }
}

答案:

贵类用户需要了解内部<条码>查询/代码>多少?

举例说明<代码>stack 标准图书馆课程。 它在内部使用标准集装箱,但它有t even 暴露了集装箱。 它暴露了推波助澜,几乎没有其他办法。

班级的使用者不必知道任何其他东西。 班次的使用者可以进入中间点。 如果你这样做,那就不再是一个障碍。

通常,班级的使用者实际上比老板更需要。 如果您的<代码>Foo 类别暴露begin(end(<>/code>,我需要做些什么? 我能够随时查阅内部数据结构的所有要素。 我可以修改其中每一项,或阅读其中每一项。

我是否还需要能够插入/删除内容? 也许,如果是的话,我是否应该直接在病媒上或通过你的适应方法这样做? 它取决于。 标的是什么? 把物体直接添加到<条码>所拥有病媒中是否有意义? Foo 在<代码>上添加物体也是有益的。 Foo 反对,让它代表它喜欢的任何内部执行?

It depends.
If by changing the state of a pub in the container you are changing the state of the object foo then you should not expose the container (as you may want to limit accesses at a later stage, or make a note of accesses).

另一方面,如果foo物体仅仅是一个也拥有病媒的美化集装箱,那么病媒可能暴露在K(注号)。 由于暴露了病媒,你对foo<>/strong>的用户具有严格的约束力,因此,在后一阶段将其改为另一个集装箱类型可能更加困难。

如果你只需要从病媒中read<>em>,就会暴露出......begin() end()和erator。 如果你实际上需要增加/消除数据或改变数据,就会暴露整个病媒。

Don t 暴露了不为人所知,用微薄的手法对电话进行总结,并检查一些明显的情况,例如,无约束和指数化,以及类型和疗效检查。

在该网站上,看到其职务的M$的密码打电话到ZD网,作为一周的拼凑,就见了恐怖。 如果你必须写上手提错的零时返回,并把它带往其他科,那么你可能会听从第8节的 ha。





相关问题