我有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()
。
还是有比这更好的方法吗?
答案 0 :(得分:1)
如果您提供适用于您的容器的标准库容器调用子集,您的用户将非常感谢:push_back
,begin
,end
和{{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);
// ...
}