![]() |
1
3
你在这里混用隐喻。 如果库是一个容器,那么它需要自己的迭代器,它不能重用成员的迭代器。因此,您可以将成员迭代器包装在ILibrary迭代器的实现中。
但严格来说,图书馆不是一个容器,而是一个图书馆。
因此,如果要对书籍执行操作,应要求库执行该操作(通过提供函数)。类的概念是它是自包含的。用户不应该使用getter来获取关于对象的信息,然后将其放回对象应该知道如何对其本身执行操作(这就是为什么我讨厌getter/setter破坏封装的原因)。
|
![]() |
2
3
如果你的库中有很多书,你应该考虑将你的“聚合”函数放入你的集合中,并传递希望它执行的操作。 具有以下性质的东西:
虽然可能不完全是这样,因为你可能需要处理使用共享的指针,常数等。 |
![]() |
3
1
为此目的(或者通常在我大量使用接口的实现中),我还为迭代器创建了一个接口,其他对象返回这个接口。它变得相当像Java。
如果您关心在堆栈的大多数情况下使用迭代器:您的问题当然是您在编译时并不真正知道迭代器的大小,因此您无法分配正确大小的堆栈变量。但是如果您真的很关心这个问题:也许您可以编写一些包装器,它要么在堆栈上分配一个特定的大小(例如128字节),如果新的迭代器适合,它就会将其移动到那里(请确保迭代器有一个适当的接口以干净的方式允许这样做)。或者你可以用
你的包装:
左右。 另一种方法,如果理论上它在编译时总是清晰的(不确定这是否适用于您;这是一个明确的限制):在任何地方使用函数。这还有许多其他的缺点(主要是头文件中有所有真正的代码),但是您将拥有非常快的代码。例子:
但是如果你过于依赖这个代码,代码可能会变得非常难看。
另一个不错的解决方案(使代码更实用——实现
使用当前C++,这可能会使代码使用起来有点复杂/难看。随着即将到来的C++ 0x和lambda函数,这个解决方案可以变得更加干净。 |
![]() |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
![]() |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
![]() |
rainer · 后台插入程序的初始化 1 年前 |
![]() |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
|
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |