Вернуть статический массив из моего объекта - PullRequest
0 голосов
/ 10 июня 2018

Имея

class Foo {
public:
  static constexpr size_t WIDTH = 10;
  static constexpr size_t HEIGHT = 20;

private:
  int _data[HEIGHT][WIDTH];
}

Я бы хотел получить свою переменную _data из функции-члена этого класса, но я не могу найти хороший прототип.

см. @ Как вернутьуказатель статического массива , но этот синтаксис, похоже, не работает с функциями-членами, он не может скомпилироваться.
Также пробовал

int **getData() {
  return static_cast<int **>(_data);
}

Но я не думаю, что это хорошая практика.

1 Ответ

0 голосов
/ 10 июня 2018

Вы всегда можете вернуть указатель на первый элемент, как вы это сделали, что совершенно безопасно.

Лучшим решением IMO было бы использовать std::array, который можно скопироватьв отличие от массивов в стиле C.

Другой способ - вернуть ссылку на массив:

auto& getData() { return _data; }

Без auto это будет выглядеть так:

int (&get())[HEIGHT][WIDTH] { return _data; }

Вы всегда можете сделать это красиво с using:

using RefToArray = int(&)[HEIGHT][WIDTH];
RefToArray get() { return _data; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...