Кудрявая инициализация шаблонов
- Войдите на сайт для отправки комментариев
Захотелось мне тут какта, надысь, инициализацию шаблонного массива сделать универсально, чтоб он и свой размер знал и элементы автоматом в себя рассовывал. Типа, чтоб можно было делать так
TArray<uint16_t> KeyArray { 100,200,300,400,500,600,700,800 };
Нуачотакова, подумал я, за мной же стоит вся мощь и сила С++ стандарта 11, с его "curly brace iitialization", почему бы и не сделать через спицальную примочку std::initializer_list<T> . Пропробовал, о вот хрена лысого, в AVR версии GCC в пространстве std определен тока std::null_ptr и нихрена больше. А сделать то хочется... Пришлось протрезветь, наморщить мосх и всё-таки родить.
файл initlist.h:
#include <Arduino.h> namespace std { template<typename T> class initializer_list { protected: const T *FItems; size_t FSize; public: constexpr initializer_list(): FItems(0), FSize(0) { } // пустой конструктор constexpr initializer_list(const T* AItems, size_t ASize) : FItems(AItems), FSize(ASize) {} //толстый конструктор constexpr size_t size() const { return FSize; } // число элементов constexpr const T* begin() const { return FItems; } // первый элемент constexpr const T* end() const { return begin() + size(); } // конец+1 }; }
Пропробовал, работает, с-ка, так как надо, теперь можно шаблонный массив и обьявлять и срауже инициализировать, например значения аналоговых кнопок в матрице от RobotDyn. Не знаю, наскока это всё законно и правильно, но Петрович поправит, еслишто. :)
Таперича придется делать: each, keys, pop, push, shift, splice, unshift, values
Таперича придется делать
Не, пока не понадобица - не придёца.
а мона пример использования?
Что-то я не догоняю, как запись
раскрывается в использование класса initializer_list.
А в progmem засунуть мона?
а мона пример использования?
Что-то я не догоняю, как запись
раскрывается в использование класса initializer_list.
Вот, но это не полный текст TArray<T>
А в progmem засунуть мона?
Нинаю. :)
Так далеко моё скудоумие не простираеца.
не понял, что помешало сразу написать вот такой конструктор. без всех этих ваших конст-экспрессионов ?
или все дело в том. чтобы его инициализировать сразу на месте списком в фигурных скобках?
сорри, до меня медленно доходит...
Если б я хотел сделать копирующий конструктор, я б его сделал. Но мне же ить вотку со льдом подавай, надо же сразу и инициализировать в месте обьявления. захотелось чота :)