隐藏容器的类的更好界面

时间:2011-09-20 13:04:24

标签: c++ stl interface iterator containers

我有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()

还是有比这更好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您提供适用于您的容器的标准库容器调用子集,您的用户将非常感谢:push_backbeginend和{{1}等内容} 例如。如果重新设计界面,客户端将更难理解,并且它并不总是与标准算法兼容。

答案 1 :(得分:1)

如果您发明自己的成员函数来操作内部对象列表,那么当我想使用您的类时,我将不得不学习您的界面。

我更倾向于使用我已经知道的标准库的约定,所以我可以立即使用你的类:

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);

        // ...
}