У меня проблема с инициализацией массива std :: array с помощью Visual Studio 2010. Я знаю, что с помощью современного компилятора я могу сделать следующее
#include <array>
class A
{
A() : arr({1,2,3,4,5,6}) {}
public:
std::array<float, 6> arr;
};
Однако Visual Studio 2010 не позволяет этого (поскольку он не полностью поддерживает C++11
). Однако есть ли альтернативный способ, который мне не хватает?
@ FrançoisAndrieux: Я согласен. Даже я взял на себя труд перейти на C++ 11 пару лет назад. Это качественный скачок в языке.
Я тоже согласен ... к сожалению, нет варианта, из-за чего мне грустно каждый день;)
@Pi Ваша задача - убедить руководство в необходимости перехода.
В теме. Но, похоже, это процесс
Извините ребята. Я не могу привести ни одного аргумента, чтобы остаться с 2010 годом. Так что я действительно не могу (и не хочу) спорить: D
@Pi: Напишите мне, когда у вас будет зеленый свет на миграцию.
@Bathsheba Готово! Спасибо за поддержку!
A() : arr{{1,2,3,4,5,6}} {}
или A() : arr{1,2,3,4,5,6} {}
работает?
@NathanOliver Нет. Инициализация с использованием {} вообще не работает.
Увы, нет. Агрегатная инициализация - это концепция C++ 11, а Visual Studio 2010 реализует стандарт C++ 03.
Альтернативой является создание массива вручную в конструкторе класса.
Если вам необходимо создать экземпляры const
для A
, создайте массив, скажем, в функции static
, и скопируйте содержимое в arr
.
Я боялся, что это правильный путь;) Спасибо
Незначительное исправление: 2010 реализует C++ 03 и немного C++ 11 :)
Я согласен с @JesperJuhl, VS2010 очень старый, если посмотреть на улучшения, сделанные в языке C++ с момента выхода VS2010. Рассмотрите возможность обновления до Сообщество Visual Studio 2017, который «бесплатен для студентов, участников с открытым исходным кодом и отдельных лиц». Обновлено: я надеюсь, что это не рассматривается как спам ...