在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区

Is it possible in C++ to transfer a buffer of a different type between std::vector objects of incompatible types

本文关键字:之间 对象 传输 缓冲区 同类型 向量 有可能 是否 不兼容 类型 std      更新时间:2023-10-16

我有两个矢量std::vector<Type1>std::vector<Type2>,具有相关尺寸的两种不同的不兼容类型Type1Type2(例如,sizeof(Type1)==2*sizeof(Type2)(。

我想执行swap()操作,就像std::vector::swap()一样,但是在具有不相容类型的向量之间。

原因:性能。我不想花时间复制数据,因为当我知道它们是兼容的数组时,名义上的类型是不同的。

C 中最好的方法是什么?

(请不要告诉我,我需要以某种方式将Type1Type2调和为一种类型,我真的不能出于此问题范围之外的原因。(

样本:

  std::vector<Type1> vec1 = getVec1(); // this returns the vector of Type1
  std::vector<Type2> *vec2 = needThisFunctionThatCreatesVec2WithTheSameBuffer(&vec1); // ????? looking for 
  consumeVec2(vec2); // this consumes vec2

std::vector不支持这种功能。

我建议通过创建人工std::span<Type2>进行轻度肮脏的解决方法,并让功能ConsumeVec2消耗span而不是vector

我知道 std::span尚未出现在标准中,但是用所需的功能(假设您只需要简单的东西(来快速替换,或者您可以使用boost::span(SRY,没有,经过测试,希望有人可以验证它(。

从根本上讲,span类是一个观众 - 它不是容器,而是对现有的容器的引用 - 它保存beginend指示器,允许向量功能功能,除了更改原始矢量和/或重新关注数据的大小外,P>

您需要更改ConsumeVec2函数的接口,以便它接受span。如果该功能修改向量的大小,则它将无法使用。因此,我不确定它是否解决了您的问题。