Size: a a a

2020 May 05

VF

Vitaly Farmov in pro.cxx
Neargye
Я бы тоже был не рад вводу такой библиотеки) нужна либо уверенность как она работает, либо тесты. Библиотека легко валится если енумы например большие или бит-маски.
Вообще во всем виноват Антон и его magic-get, я этим и вдохновился.
Ну тесты вроде бы есть. Большие енумы - это для нас все-таки больше исключение, а для битмасок я бы использовал std::bitset от енума, а с помощью magic_enum просто получал бы его размер :)
источник

N

Neargye in pro.cxx
Vitaly Farmov
Спасибо. Классная библиотека. Пытаюсь ее вместо костылей втянуть в проект, но  люди упорно не хотят облегчать себе жизнь и продолжают писать статические мапки и прочие костыли. Даже уже и не знаю, какие аргументы еще приводить. Дошло до того, что предложили ограничить одного человека, которому будет позволено в енумы добавлять новые значения..
Насчет этого, в некоторых проектах использует Java подход
Типо так
struct PlatformType : public EntityTag<PlatformTypeTag, 5> {
   inline static constexpr auto External      = Values[0];
   inline static constexpr auto Internal      = Values[1];
   inline static constexpr auto Unity3D       = Values[2];
   inline static constexpr auto UnrealEngine4 = Values[3];
   inline static constexpr auto WaveVR        = Values[4];
};

А EntityTag сам генерирует методы сайз, и все другие.
источник

VF

Vitaly Farmov in pro.cxx
Neargye
Насчет этого, в некоторых проектах использует Java подход
Типо так
struct PlatformType : public EntityTag<PlatformTypeTag, 5> {
   inline static constexpr auto External      = Values[0];
   inline static constexpr auto Internal      = Values[1];
   inline static constexpr auto Unity3D       = Values[2];
   inline static constexpr auto UnrealEngine4 = Values[3];
   inline static constexpr auto WaveVR        = Values[4];
};

А EntityTag сам генерирует методы сайз, и все другие.
Ух жесть :) Спасибо!
источник

N

Neargye in pro.cxx
Vitaly Farmov
Ух жесть :) Спасибо!
Я может как-то выложу в опенсурс это. Хотя это ближе к https://github.com/aantron/better-enums но без макросов
источник

A

Alex in pro.cxx
ARCHANGEL
Парни, есть вопрос. Допустим, у меня есть std::vector<uint8_t> , и я беру его начало через метод data(). Могут ли быть какие-то проблемы, если я делаю так:

return *reinterpret_cast<uint64_t*>(v.data());
это UB. Так что да, могут.
источник

OS

Oleksandr Senkovych in pro.cxx
А чо там с рефлексией в крестах, кстати? Я помню был как-то на конференции там половина докладов была вокруг нее (в т.ч. как запилить рефлексию через libclang)
источник

A

ARCHANGEL in pro.cxx
Alex
это UB. Так что да, могут.
спасибо, а можно ссылку на этот UB? ну чисто чтоб я мог ссылаться при аргументировании исправления кода
источник

A

Alex in pro.cxx
strict aliasing rules
источник

A

ARCHANGEL in pro.cxx
ок, поищу, спасибо
источник

A

Alex in pro.cxx
правильное решение - объявить локальный uint64_t и сделать в него memcpy 8 байт с нужного адреса в векторе.
источник

OS

Oleksandr Senkovych in pro.cxx
Alex
правильное решение - объявить локальный uint64_t и сделать в него memcpy 8 байт с нужного адреса в векторе.
а через юнионы тоже ub?
источник

A

Alex in pro.cxx
да, нельзя писать в одно поле юнион и потом читать из другого
источник

OS

Oleksandr Senkovych in pro.cxx
А через bitset?
источник

OS

Oleksandr Senkovych in pro.cxx
юзкейс правда другой
источник

N

Neargye in pro.cxx
Oleksandr Senkovych
А чо там с рефлексией в крестах, кстати? Я помню был как-то на конференции там половина докладов была вокруг нее (в т.ч. как запилить рефлексию через libclang)
Ждем с++26
источник

OS

Oleksandr Senkovych in pro.cxx
Alex
да, нельзя писать в одно поле юнион и потом читать из другого
А как насчет bit_cast?
источник

A

Alex in pro.cxx
он для этого сделан, но его ещё нигде нет
источник

OS

Oleksandr Senkovych in pro.cxx
В смысле нет поддержки компилятора или еще не в стандарте? cppreference говорит что в 20м он
источник

A

Alex in pro.cxx
нет поддержки
источник

OS

Oleksandr Senkovych in pro.cxx
В моем болоте (финтех) такие reinterpret_cast'ы на каждом шагу кстати. Все знают что UB но надеятся на благоразумность компилятора.
источник