在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
Is it possible in C++ to transfer a buffer of a different type between std::vector objects of incompatible types
我有两个矢量std::vector<Type1>
和std::vector<Type2>
,具有相关尺寸的两种不同的不兼容类型Type1
和Type2
(例如,sizeof(Type1)==2*sizeof(Type2)
(。
我想执行swap()
操作,就像std::vector::swap()
一样,但是在具有不相容类型的向量之间。
原因:性能。我不想花时间复制数据,因为当我知道它们是兼容的数组时,名义上的类型是不同的。
C 中最好的方法是什么?
(请不要告诉我,我需要以某种方式将Type1
和Type2
调和为一种类型,我真的不能出于此问题范围之外的原因。(
样本:
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
类是一个观众 - 它不是容器,而是对现有的容器的引用 - 它保存begin
和end
指示器,允许向量功能功能,除了更改原始矢量和/或重新关注数据的大小外,P>
您需要更改ConsumeVec2
函数的接口,以便它接受span
。如果该功能修改向量的大小,则它将无法使用。因此,我不确定它是否解决了您的问题。
相关文章:
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- std::memmove在同一对象之间是否始终安全
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 将基类分配给派生对象,反之亦然,以C++以及静态和动态对象之间的差异
- const auto & 和 auto & if reference 对象之间的区别是 const
- C++:在另外两个对象之间共享一个对象
- C++ 对非常量对象的常量引用和对非常量对象的非常量引用之间的区别
- 拥有或在对象之间共享资源
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- 管理器类和对象类之间的通信
- 类型测试对象的动态数组的这两个声明之间的区别?
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- 运行线程和线程对象之间的关系
- C++实现相同接口的对象/类之间的数据共享
- 通过引用传递对象和基元之间的区别
- 有没有办法在两个共享对象之间使用相同的全局变量?
- 通过 Boost Python 在C++对象之间传递共享指针的隔离错误
- 在 c++ 中将结构的每个成员写入文件和将结构对象直接写入文件之间有什么区别吗?