Подзадача этого состоит в создании вектора размера N, заполненного нулями.Возможно ли это сделать с помощью шаблонного метапрограммирования?
Если под «вектором» подразумевается именно «std::vector
», нет: невозможно в C ++ 11, C ++ 14 или C ++ 17.Возможно с будущими версиями стандарта;не сейчас.
Если для «вектора» вы принимаете «std::array
», да: это возможно и тривиально просто (не требуется функция инициализации)
constexpr std::array<int, 10> a{}; // zero initialized !
Я полагаю, что вашVec
может быть написано
template <std::size_t N> // better std::size_t for a size (IMHO)
struct Vec
{
std::array<int, N> vec; // no static for a member, please
constexpr Vec () : vec{}
{ }
};
, но мне кажется, что вы можете напрямую использовать std::array
.
Но компилятор говорит, что «for-loops» не являютсяразрешено в конструкторе constexpr.Есть ли способ достичь такой функциональности во время компиляции?
Компилятор жалуется на проблему другого типа: он говорит, что в C ++ 11 функция constexpr
не можетсодержит цикл for.
В C ++ 11 функция constexpr
может содержать (значительно упрощая) только инструкцию return
.Конструктор constexpr
должен быть пустым;только список инициализации.
Если вам нужна более сложная функция constexpr
(с циклом for), вам нужен C ++ 14.