1

我正在尝试将 astd::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);

4

1 回答 1

2

您的decode方法已标记const,但您正在尝试修改类成员变量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();
}
于 2020-07-01T13:41:08.390 回答