Я хотел бы знать, как лучше определить тип std :: array с помощью дополнительной функции выравнивания памяти с использованием современного C ++ 11. Я понимаю, что alignas
нельзя использовать с псевдонимами типов, но это дух того, что я пытаюсь сделать:
template<class T, std::size_t N, std::size_t A>
using AlignedArray = alignas(A) std::array<T, N>;
который может быть создан следующим образом:
AlignedArray<int8_t, 4, 32> MyArray;
Лучшая рабочая версия, которую я мог придумать, это:
template<class T, std::size_t N, std::size_t A>
struct alignas(A) AlignedArray : std::array<T, N> {
using std::array<T, N>::array;
};
Кто-нибудь может предложить что-нибудь попроще или лучше? Я новичок в вопросах выравнивания памяти, поэтому любые советы будут оценены.
Как было отмечено в предыдущем вопросе, вы можете сделать это, конечно:
alignas(32) std::array<int8_t, 4> MyArray;
Но это не определяет повторно используемый тип, так что это не то, что я ищу в этом вопросе.