Здравствуйте, vopl, Вы писали:
V>operator+ для с++17:
V> | не подсматривать |
| V>V> constexpr static uint8_t countIndex(uint8_t entityNumber) { // обратный к countEntityNumber
V> uint8_t idx = 0;
V> while(countEntityNumber(idx) <= entityNumber) {
V> idx++;
V> }
V> return idx-1;
V> }
V> template<typename TOther, uint64_t MaskOther>
V> constexpr auto operator +(const SparseArray<TOther, MaskOther>& other) const {
V> using Result = SparseArray<decltype(T{} + TOther{}), Mask | MaskOther>;
V> return [this, other]<uint8_t... EntityNumbers>(std::integer_sequence<uint8_t, EntityNumbers...>)
V> {
V> return Result{(get<Result::countIndex(EntityNumbers)>() + other.template get<Result::countIndex(EntityNumbers)>())...};
V> }(std::make_integer_sequence<uint8_t, Result::size>{});
V> }
V>
V>
|
| |
Вот это лямбда!
Сижу с лупой
Я таких шаблонных лямбд не встречал еще.
Получается, здесь создается лямбда(какая-то шаблонная) и в ней происходит раскрытие parameter pack прямо в конструкторе.
Затем сразу идет её вызов.
Получившейся объект возвращается наружу.
Но почему в этой лямбде получилось обойти ту ошибку —
`this` is not constant... ?
Здравствуйте, reversecode, Вы писали:
R>ну так вы расскажите нам кто это такие задачки раздает
R>имя компании
Я сейчас точно не могу сказать. Возможно, рекрутер даже не сказал, что за компания.
У меня где-то в списке сообщений от разных рекрутеров в "моем круге" лежит.
Помню, что написали, что компания занимается беспилотниками.
Отсюда приходит понимание, что разработка
embedded system, для который вычисления в
compile-time — просто первая необходимость, чтобы сберечь ресурсы во время выполнения программы.