有没有办法通过getter将2维数组作为成员变量返回?

时间:2017-07-19 13:48:43

标签: c++ arrays

我正在处理我的个人项目。 我想知道的是这个

class Tile
{
private:
    char mBlockTile[22][24];

我只想通过getter返回那个2D数组,比如

char* GetBlockTile()
{
  return mBlockTile;
}

但我完全不知道该怎么做。 我多次修改函数的数据类型并尝试返回2D数组, 但它不起作用。 :( 请尽快帮忙。 谢谢!

2 个答案:

答案 0 :(得分:4)

如果可以,您应该使用std::array

#include <array>

class Tile {
    std::array<std::array<char, 24>, 22> mBlockTile;
    auto& GetBlockTile() { // return a reference, you don't want a copy
        return mBlockTile;
    }
};

如果您无法使用std::array,旧方法(在c ++ 11和auto / decltype之前)将是:

char (*GetBlockTile())[24] {
    return mBlockTile;
}

或参考:

char (&GetBlockTile())[22][24] {
    return mBlockTile;
}
// (freaky) const version
const char (&GetBlockTile() const)[22][24] {
    return mBlockTile;
}

...此时您可能想要开始使用typedef

typedef char tBlockTile[22][24];
tBlockTile mBlockTile;

const tBlockTile& g() const {
    return mBlockTile;
}

答案 1 :(得分:2)

丑陋的语法:

class Tile
{
private:
    char mBlockTile[22][24];
public:
    char (&getBlock()) [22][24] { return mBlockTile; }
};

使用using

class Tile
{
private:
    char mBlockTile[22][24];
    using blockType = char[22][24];
public:
    blockType& getBlock() { return mBlockTile; }
};