为隐藏容器的类提供更好的接口
Better interface for a class that hide container
我有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_back
、begin
、end
和find
之类的东西。如果重新设计接口,客户端将更难理解,而且它并不总是与标准算法兼容。
相关文章:
- C++:将控制台输出存储在宏中更好吗
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 初始化具有非默认构造函数的std::数组项的更好方法
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 为什么新的随机库比std::rand()更好
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 什么是更好的做法?通过指针或标识符传递类成员?
- 寻求更好地理解标准::访问
- 线程消息传递或更好:在"大师班"中访问其他班级的成员
- 有没有更好的方法来处理异常? try-catch块真的很丑
- 如何更好地检查两个 char 变量是否在一组值中?
- 有没有更好的方法对C++中的三个整数进行排序?
- 什么模板用法在阶乘中更好
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 我们应该如何使用枚举类进行索引(或者我们应该更好地避免这种情况)?
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 用c++编写命令行接口的更好方法是什么
- 为隐藏容器的类提供更好的接口