在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic

Error using boost::from_block_range on member dynamic_bitset, but not on local dynamic_bitset

本文关键字:dynamic 出错 range from bitset 成员 boost block      更新时间:2023-10-16

>我正在尝试将std::vector<uint8_t>转换为boost::dynamic_bitset。我可以使用以下代码实现与此相反的结果,其中values是一个定义为boost::dynamic_bitset<uint8_t> values.

std::vector<uint8_t> payload;
boost::to_block_range(values, std::back_inserter(payload));

但是,我不知道如何做相反的事情。以下编译:

void MyClass::decode(std::vector<uint8_t> payload) const
{
boost::dynamic_bitset<uint8_t> bits(payload.size() * 8);
boost::from_block_range(payload.begin(), payload.end(), bits);
}

如果我将bits局部作用域变量替换为values类成员变量(从所有指示来看,该变量都是完全相同的类型,boost::dynamic_bitset<uint8_t>(,则会出现以下编译器错误:

error: no matching function for call to ‘from_block_range(std::vector<unsigned char>::iterator, std::vector<unsigned char>::iterator, const boost::dynamic_bitset<unsigned char>&)’ boost::from_block_range(payload.begin(), payload.end(), values);

您的decode方法被标记为const,但您正在尝试修改类成员变量values

删除const或标记valuesmutable

例如:

#include <cstdint>
#include <vector>
#include "boost/dynamic_bitset.hpp"
struct foo
{
void do_the_thing()
{
std::vector<uint8_t> payload{1, 2, 3, 4};
bits = boost::dynamic_bitset<uint8_t>(payload.size() * 8);
boost::from_block_range(payload.begin(), payload.end(), bits);
}

boost::dynamic_bitset<uint8_t> bits;
};
int main()
{
foo f;
f.do_the_thing();
}