Информация об изменениях

Сообщение Re[2]: Разреженный массив в compile-time от 05.07.2018 16:22

Изменено 05.07.2018 16:30 avovana

Re[2]: Разреженный массив в compile-time
Здравствуйте, 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>


Вот это лямбда! Сижу с лупой
Re[2]: Разреженный массив в compile-time
Здравствуйте, 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 — просто первая необходимость, чтобы сберечь ресурсы во время выполнения программы.