gpt4 book ai didi

c++ - 移动而不是复制 boost::dynamic_bitset BlockInputIterator 构造函数?

转载 作者:行者123 更新时间:2023-11-30 02:34:08 25 4
gpt4 key购买 nike

是否可以创建另一个 boost::dynamic_bitset BlockInputIterator 构造函数以使用移动而不是复制 std::vector

我相信以下构造函数使用复制 boost docs :

template <typename BlockInputIterator>
dynamic_bitset(
BlockInputIterator first,
BlockInputIterator last,
const Allocator& alloc = Allocator());

这是我写的一些代码来显示我的要求:

#include <iostream>
#include <vector>
#include <boost/dynamic_bitset.hpp>

using namespace std;
using namespace boost;

int main(int argc, char* argv[])
{
// Notice the vector opposed to dynamic_bitset
vector<uint8_t> data;

// put in dummy data
data.push_back(0x1a);
data.push_back(0xcf);
data.push_back(0xfc);
data.push_back(0x1d);
for (auto i = data.begin(); i != data.end(); ++i)
{
cout << hex << (int)*i << dec << ' ';
}
cout << std;
cout << "data.data(): " << hex << (uint64_t)data.data() << dec << endl;

// I believe this is a copy opposed to a move
boost::dynamic_bitset<uint8_t> bs0(data.begin(), data.end());

// I would like to be able to do this which would use move,
// is that possible considering the vector?
boost::dynamic_bitset<uint8_t> bs1 = data;

return 0;
}

所以基本上我想知道 boost 是否可以向 boost::dynamic_bitset 添加一个额外的构造函数以使用移动而不是复制 std::vector

最佳答案

除非 vector 的界面发生变化。

你看,运动对于一个物体来说是一个非常亲密的操作;这就是为什么移动支持需要该类型的成员函数。这不是您可以从外部强加到物体上的东西。

vector 无法采用任意的、用户分配的内存缓冲区作为其内部存储。理论上可以通过某种方式要求它这样做,但目前没有这样的接口(interface)。没有这样的支持,其他代码无法为 std::vector 提供内存。

Boost 或许能够提供boost::container::vector 这样的接口(interface)。但这不会改变 std::vector

同样,您不能带着 std::vector 的内存存储潜逃。好吧,你可以,但只能通过分配器欺骗。也就是说,当 vector 要求分配器实际解除分配或销毁对象时,您必须告诉分配器不要实际解除分配或销毁对象。这将很棘手,因为 vector::get_allocator 返回分配器的拷贝。

当然,dynamic_bitset 也没有办法获得分配;它希望拥有它。很像 vector。因此,即使您可以利用 std::vector 的存储潜逃,dynamic_bitset 也无法采用它。

关于c++ - 移动而不是复制 boost::dynamic_bitset BlockInputIterator 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34778000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com