在成员 dynamic_bitset 上使用 boost::from_block_range 时出错,但在本地 dynamic_bitset 上却没有
Error using boost::from_block_range on member dynamic_bitset, but not on local dynamic_bitset
我正在尝试将 std::vector<uint8_t>
转换为 boost::dynamic_bitset
。我可以使用以下代码实现它的逆运算,其中 values
是一个 class 成员函数,定义为
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);
}
如果我用 values
class 成员变量替换 bits
局部作用域变量(从所有迹象来看,它们都是完全相同的类型,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
,但您正试图修改 class 成员变量 values
.
删除 const
或标记 values
mutable
#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();
}
我正在尝试将 std::vector<uint8_t>
转换为 boost::dynamic_bitset
。我可以使用以下代码实现它的逆运算,其中 values
是一个 class 成员函数,定义为
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);
}
如果我用 values
class 成员变量替换 bits
局部作用域变量(从所有迹象来看,它们都是完全相同的类型,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
,但您正试图修改 class 成员变量 values
.
删除 const
或标记 values
mutable
#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();
}