|
|
1
3
如果你想要一个迭代的虚拟接口,像这样?
这不是一个完整的解决方案-我还没有实现
我将状态存储在ConcreteStorage类中,这意味着不能在同一个存储上同时有多个迭代器。所以可能不是
|
|
|
2
2
我没有看到存储的好处是多态的。 无论如何,注意迭代器根本不需要多态性。 它只需要使用存储类中的虚拟方法来实现其功能。这些方法可以很容易地在子代中重写(创建所需的功能)。 |
|
|
3
1
我不太清楚为什么这是个问题。您只需要实现所有迭代器运算符(增量、解引用等),以便它们调用
|
|
|
4
1
使用数据库引擎进行存储的事实并没有改变这样一个事实,即这里的内容基本上是一个容器类。 简而言之,您几乎肯定应该使用在所存储的对象类型上实例化的类模板。存储引擎中的变量可以通过继承或第二个模板参数来处理。使用模板参数会产生编译时多态性,而继承会产生运行时多态性(即,您可以在运行时更改存储引擎)。 你可能想看看 DTL 为了一些灵感(或者你可以省去很多麻烦,在遇到问题之前或者除非遇到问题之前使用它)。 |
|
|
5
0
这似乎是一个动态分配与更改迭代器状态大小(无需重新编译客户端)能力的对比案例。 |
|
|
6
0
您可以尝试boost::iterator,它提供了几个适配器和外观。 http://www.boost.org/doc/libs/1_45_0/libs/iterator/doc/index.html |
|
|
7
0
看看adobe::any_iterator或任何_iterator的其他实现(http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/any_iterator.html)。它实现了一个多态迭代器概念,但是您仍然可以处理任何按值迭代器(按值返回、按值传递等)。 |
|
|
8
0
实际使用不同类型容器的算法代码必须用模板函数(可能是成员函数)编写,模板函数通过模板的参数获取类型。 在编译时解析的。对于模板函数的每个实例,确切的迭代器类型都是已知的。 如果确实需要运行时解析,则需要添加一个分派来调用上述模板函数的不同实例。虚拟函数应该调用实际的算法模板函数,但这将是某个模板类中的虚拟函数重写(即,将为每个实例分别编译虚拟函数并调用算法模板函数的不同实例)。 如果你需要双重/多重派遣,那就做吧。可惜c++不支持函数在多个参数上是虚拟的,所以必须使用任何常用的方法进行双重分派。但对实际算法函数的调用应该在调度解决后进行。 |
|
|
Eris · 纯虚拟成员有什么优势吗(除了他们可能防止的人为错误)? 4 年前 |
|
|
James Nguyen · Java多态性:为什么返回错误? 8 年前 |
|
|
Alex Cristea · 如何从另一个类的数组中打印特定行 8 年前 |
|
juztcode · C语言中的静态和动态分辨率++ 8 年前 |
|
|
Hugo · 具有多态关系的活动记录获取关联模型 8 年前 |
|
|
pooya13 · 机器代码层上虚函数和条件执行的区别 8 年前 |
|
|
Nisba · C中子类类型未知的模型类/子类++ 8 年前 |
|
|
R zu · 使用多次调用的可替换方法初始化 8 年前 |