提问者:小点点

在成员dynamic_bitstruct上使用BOOST::FROM_BLOCK_RANGE时出错,但在作用域dynamic_bitstruct上不使用


我正在尝试将std::vector转换为boost::dynamic_bitset。 我可以使用下面的代码实现相反的结果,其中values是定义为boost::dynamic_bitset的类成员函数; 值

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),则会出现以下编译器错误:

错误:调用“from_block_range(std::vector::iterator,std::vector::iterator,const boost::dynamic_bitset&)'没有匹配的函数;


共1个答案

匿名用户

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

删除常量或标记可变

例如:

#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();
}