C++ 如何使用boost::dynamic_位集为类重载()运算符

C++ 如何使用boost::dynamic_位集为类重载()运算符,c++,boost,byte,bit,bitset,C++,Boost,Byte,Bit,Bitset,我创建了一个类,它模拟位集中的二维数据集。以下是我迄今为止创造的: class Data { private: int width_; int height_; boost::dynamic_bitset<> * bitset_; dynamicznie public: Data() : width_(0), height_(0) {} Data(int width, int

我创建了一个类,它模拟位集中的二维数据集。以下是我迄今为止创造的:

class Data
{
    private: 
        int width_; 
        int height_; 
        boost::dynamic_bitset<> * bitset_; dynamicznie

    public:
        Data() : width_(0), height_(0) {} 
        Data(int width,  int height) : width_(width), height_(height) 
        {
            bitset_ = new boost::dynamic_bitset<>(width * height); 
        }

    boost::dynamic_bitset<>::reference & operator()(const int x, const int y)
    {
        return bitset_[x * height_ + y];
    }

};

显然,dynamic_位集本身提供了一个运算符[]。您已将其声明为指针,因此方括号被视为该指针的索引访问;它将指针视为指向数组的指针,并返回该数组的(不存在且未分配)元素,该元素是对动态位集的(悬空)引用,而不是对单个位的引用

是否有任何真正的理由让该成员作为指针?你甚至不在复制/分配/销毁中处理它,因此违反了五条规则。只需将其设置为对象成员,而不是指向堆上分配的对象的指针:

    boost::dynamic_bitset<> bitset;
public:
    Data(int w, int h): width_(w), height_(h), bitset(w * h) {}
boost::动态位集位集;
公众:
数据(intw,inth):宽度(w),高度(h),位集(w*h){

另一方面,如果您不使用负尺寸,则std::size\U t作为尺寸标注更有意义。

位集是一个指针,您应该在使用前取消对其的引用

    (*bitset_)[x * height_ + y];
请记住
运算符[]
对于
动态位集
返回临时对象

参考运算符[](尺寸类型pos)

布尔运算符[](大小\类型位置)常数

不能将其分配给L值引用-
动态\u位集::引用&
。因此,您应该如下定义运算符()

boost::dynamic_bitset<>::reference  operator()(const int x, const int y)
{
    return (*bitset_)[x * height_ + y];
}
boost::dynamic_bitset::reference operator()(常量int x,常量int y)
{
返回(*位集)[x*高度+y];
}

我无法发布其他问题,因此我将在此处发布。我想了解从IFS函数生成分形的算法。此算法代码如下所示: 但是我不明白minX,minY,maxX,maxY,ratioX,ratioY变量的用途是什么。我就是不能。我想了很多,想不出来


有趣的是,这些值必须设置为特定值。否则算法就不能正常工作(我已经测试过了)。

它指出的错误是什么?
    (*bitset_)[x * height_ + y];
boost::dynamic_bitset<>::reference  operator()(const int x, const int y)
{
    return (*bitset_)[x * height_ + y];
}