我正在接收低级别{ void * data; uint stride, count; }
的托管数据。我可以读取,写入和交换数据项,但不能添加或删除/调整大小/重新分配。有足够的信息来重新命名和随机访问,但没有类型信息来取消引用。所有不透明的项目都可以重新命名复制和移动。
在现代C++中,是否有可能促进这种数据格式的标准兼容性,省略解引用接口,并将评估委托给外部上下文?类似于:
std::sort(OpaqueFirst, OpaqueLast, [](Opaque a, Opaque b){ return handle(a, b); });
字符串
1条答案
按热度按时间u1ehiz5o1#
基本的想法是创建一个类型,引用你的一个子数组,并定义
swap
来实际交换它们的内容:字符串
然后我们只需要创建一个这样的对象的惰性范围,这很容易用
std::views::transform
Packagestd::views::iota
,并从问题中编写平凡的比较器:型
不幸的是,
sort
要求能够将范围元素移动到临时变量中,而不仅仅是交换它们。这需要一个相当复杂的 Package 器类型,可以临时拥有**数据,这反过来又需要动态分配,因为array::stride
不是常量:型
保留我们的自定义
swap
避免了对每个元素交换使用这样的分配,所以性能并不可怕。未实现的operator=(…) const
是必要的,以说服库buffer
是一个代理类型,应该支持通过纯右值排序。具有完整
buffer
类型的complete example存在于浏览器资源管理器中。