从类返回2D数组指针

时间:2017-04-07 00:13:57

标签: c++ arrays pointers multidimensional-array

我有一个名为Engine的类,它保存并返回一个缓冲区,如下所示:

template <int width, int height, int meshSize>
class Engine {
    public:
        byte buffers[2][width][height];
        byte fBuffer = 0;
        byte** getBuffer() {
            return buffers[fBuffer];
        };
}

我想循环浏览我的主要值,但我似乎无法让它工作..

byte* buff;

// main
buff = engine->getBuffer();

for (int x = 0; x < 320; x++) {
    for (int y = 0; y < 320; y++) {
        if (buff[x][y] != NULL) {
            Serial.println(buff[x][y]);
        }
        // lcd.drawPixel(x, y, RGB(buff[x][y], buff[x][y], buff[x][y]));
    }
}

星号和/或括号的哪种组合可以起作用?

1 个答案:

答案 0 :(得分:0)

您应该返回对数组的引用,而不是指针。我还建议为const提供getBuffer重载以进行只读操作。

template <int width, int height, int meshSize>
class Engine {
public:
    using BufferType = byte[width][height];

    BufferType const& getBuffer() const {
        return buffers[fBuffer];
    };

    BufferType& getBuffer() {
        return buffers[fBuffer];
    };

private:
    BufferType buffers[2];
    byte fBuffer = 0;
};

为简洁起见,您可以在调用auto时使用getBuffer来推断此类型:

auto& buff = engine->getBuffer(); // reference to the buffer