【发布时间】:2023-02-02 23:33:24
【问题描述】:
标准库中是否有任何部分支持以下用例:
您有 N 个集合,每个集合都可能是一种集合(C1、C2 ...、Cn),所有这些集合都支持 begin()、end() 和迭代,即(向量、双端队列等)。
这些集合中的每一个都可以包含不同类型的对象,即集合是 C1、C2、C3,并且具有不同的大小。
此外,您可以为每种类型提供一个函数,该函数可以返回一个公共值,该值可用于在类型之间对项目进行排序,即std::function<uint_64(A)>、std::function<uint_64(B)>。例如,类型 A 有成员A.timestamp,B 有成员B.TimeStamp,C 有函数C.GetTimestamp()。
每个集合都已按此函数排序。
我想做的是使用顺序函数按顺序遍历所有集合中的所有项目,然后调用另一个函数,即访问函数,std::function<void(A &)> 用于 A 的集合,std::function<void(B&)> 用于 B 类型的项目等.
通话顺序为: 首先查看每个集合中第一项的排序函数的返回值。哪一个的值最小,就称它为 visitor 第一项。然后找到其下一项具有最低排序值的集合。在排序功能上的联系,迭代集合中最先出现在集合“集合”中的集合。一旦集合达到“结束”,它就会从迭代中删除。
我正在考虑推出自己的产品,但想知道标准库中是否已经有类似的东西。
【问题讨论】:
-
可能有一个解决方案,但如果您描述了您想要完成的事情而不是您想要如何实现它,它会有所帮助。
标签: c++ visitor-pattern