types и size объединять в одну сущность
и там constexpr конструктором через initialization_list подсчитать
или натянуть вариадик конструктор на текущую структуру
там размерность из вариадиков можно будет взять
но тогда скорее всего types[20] будет плавать по размеру изза вариадиков
но тогда и size нафиг не нужен
ибо sizeof(types) == size
Re[2]: Как взять количество элементов из инициализатора?
Здравствуйте, reversecode, Вы писали:
R>types и size объединять в одну сущность R>и там constexpr конструктором через initialization_list подсчитать
Можно кинуть примером?
R>или натянуть вариадик конструктор на текущую структуру R>там размерность из вариадиков можно будет взять R>но тогда скорее всего types[20] будет плавать по размеру изза вариадиков R>но тогда и size нафиг не нужен R>ибо sizeof(types) == size
Про вариадики не понял. Код бегает по конкретному типу.
Re: Как взять количество элементов из инициализатора?
Здравствуйте, drVanо, Вы писали:
V>Здравствуйте, reversecode, Вы писали:
R>>types и size объединять в одну сущность R>>и там constexpr конструктором через initialization_list подсчитать
V>Можно кинуть примером?
V>Спасибо, проще наверное засунуть в в конец списка как-нить "стоп" тип и убрать size из структуры совсем.
А на входе ТОЛЬКО константные списки инициализации? или рантайм-наборы имеют право на существование?
так по идее просто напрашивается span если есть гарантия, что список инициализиации никуда не пропадет и не изменится -- тогда хранить можно просто span без всякого массива
Если нужен именно массив, причем именно "стандартного размера" и size для реально используемых -- тоже не проблема ни разу
Здравствуйте, K13, Вы писали:
K13>Если нужен именно массив, причем именно "стандартного размера" и size для реально используемых -- тоже не проблема ни разу
Работает, только вот этот конструктор:
constexpr token_encoding_t( uint8_t bits_, Iterator begin, Iterator end )
не может быть использован в выражениях времени компиляции, хотя и помечен как constexpr
Re[5]: Как взять количество элементов из инициализатора?
V>Сейчас приходится писать руками, может быть есть способ лучше.
Немного оффтопа. Не очень хорошо то, что поля types и size находятся в прямом досттупе и пользователь может модифицировать их независимо друг от друга и тем самым создать рассогласование данных. По-хорошему, такие вещи нужно прятать в закрытой секции и предоставлять безопасный открытый интерфейс, который будет гарантировать согласованность данных. Как вариант, можно написать собственный контейнер общего применения (что-то типа limited_size_vector) и использовать его вместо пары массив-размер. Все сказанное можно проделать с сохранением возможности использования в компайл-тайм (constexpr). И что примечательно, если так сделать, то проблема инициализации поля size решится автоматически. Ведь если разобраться, то эти две проблемы тесно связаны между собой.
--
Не можешь достичь желаемого — пожелай достигнутого.
Здравствуйте, fk0, Вы писали:
fk0> Привёл огромную портянку кода, все его дизассемблировали и сразу поняли, откуда ты там решил, что нужно писать 4 и 2.
Многим удалось, да.