为隐藏容器的类提供更好的接口

Better interface for a class that hide container

本文关键字:更好 接口 隐藏      更新时间:2023-10-16

我有MyClass,它将容器隐藏在里面,我想控制何时向容器中添加新项以及何时从容器中删除项,但我不需要控制只读操作,如getter函数

class MyClass {
    protected: 
        std::vector<MySubClass> subclasses;
    public:
}

为了与MyClass的用户接口,我是否应该实现诸如之类的接口功能

addSubClass()getSubClassAt(int )getSubClassIndex(MySubclass )delSubClass()

或者它最好只返回const迭代器,用于只读操作:

std::vector<MySubClass>::const_iterator getSubclassIterator()

并提供等特殊写入操作功能

addSubClass()delSubClass()

或者有比这些更好的方法吗?

如果你发明了自己的成员函数来操作对象的内部列表,那么当我想使用你的类时,我必须学习你的接口。

我更希望你使用标准库的约定,我已经知道了,所以我可以立即使用你的类:

class MyClass {
    protected: 
        std::vector<MySubClass> subclasses;
    public:
        typedef std::vector<MySubClass>::const_iterator const_iterator;
        const_iterator begin() const {return subClasses.begin();}
        const_iterator end  () const {return subClasses.end  ();}
        void insert(const_iterator where, const MySubClass& obj);
        iterator erase(iterator pos);
        iterator erase(iterator begin, iterator end);
        // ...
}

如果您提供适用于您的容器的标准库容器调用的子集,您的用户将非常感激:例如push_backbeginendfind之类的东西。如果重新设计接口,客户端将更难理解,而且它并不总是与标准算法兼容。