Шаблон контейнера класса считается «скалярным»? - PullRequest
0 голосов
/ 03 декабря 2011

У меня есть шаблонный класс, который является простым вектором, но этот кусок кода отказывается компилироваться:

template<int t>
struct Vector {
 int pos[t];
 Vector(int other[t]) {
  for (int i = 0;i < t;++i) {
   pos[i] = other[i];
  }
 }
};

Vector<3> cake = {3,4,5};

Это ошибка:

Line 11: error: scalar object 'cake' requires one element in initializer
compilation terminated due to -Wfatal-errors.

Почему это не работает? Какой самый простой способ заставить его работать так же, как этот?

EDIT:

Это тоже не работает:

Vector<3> cake({3,4,5});

Разве это не должно вызывать конструктор с подписью Vector<3>(int[3])?

1 Ответ

2 голосов
/ 03 декабря 2011

В C ++ 03 форма инициализатора {} разрешена только для агрегатов (включая POD).

Шаблон класса в коде не является POD и агрегатом.Прочитайте мой ответ здесь, чтобы узнать определение POD и Aggregate.

Как только вы узнаете определения, вы узнаете, что вы можете сделать, чтобы сделать свой POD класса (если хотите).Однако в C ++ 11 вы можете использовать {} initializer, но вы используете std::initializer_list<T> в качестве типа параметра конструктора.Тогда вы можете использовать {} даже для типов, которые не являются POD и Aggregate!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...