Dimich
> Новый gcc и соответственно msvc там нужен только для шаблонной магии вывода
> типов c++17, в c++11 можно так же писать enum_name<Enum, Enum::Val>();
Нет, хоть как пиши, всё что связано с именем требует GCC >= 9 там. Инфа получена из чтения исходников (где это кристально видно) и баловства на разных компилерах с ним.
nes
> const int32 MaxSomeEnumKeys = static_cast<int32>(SomeEnum::EnumCount_);
А это зачем?
int do_shit() { return 0; } do_shit(); // << дублирование названия функции?
NyakNyakProduction
>А это зачем?
Чтоб не писать потом в коде постоянно static_cast<int32>(SomeEnum::EnumCount).
Надо всегда писать static_cast<int32>(...) !
Это как по утрам обливаться холодной водой , для укрепления здоровья и потенции :)))
nes
> static_cast<int32>(SomeEnum::EnumCount).
Почему не uint? У вас будут негативные значения? И вам надо будет как-то знать сколько их? Зачем? Почему 32? Вам надо все эти 2 миллиарда значений?
Сколько вообще раз вам пригодилось знать кол-во энумов? Кроме ситуаций, когда надо статически выделить массив для каких-нибудь параллельных ивентов, которые ещё по кодам не должны быть сильно разбросаны?
На каждый чих какие-то фреймворки, лол.
NyakNyakProduction
>Почему не uint? У вас будут негативные значения?
Не исключено.
>И вам надо будет как-то знать сколько их? Зачем?
Например, чтоб завести массив с флагами по этим энумам,
например массив keys, с состоянием клавиатуры.
А еще для проверки границ, чтоб быть уверенным что значение не выходит за допустимый диапазон.
>Почему 32?
Для бинарной совместимости, вестимо.
>Сколько вообще раз вам пригодилось знать кол-во энумов?
Не часто.
MATov
> Нет, хоть как пиши, всё что связано с именем требует GCC >= 9 там.
Ты наркоман? Макрос __PRETTY_FUNCTION__ доступен в gcc 5, c++17 там нужен только для constexpr, точнее для фишек, которые не позволяет c++11, а так как я предложил, можно хоть где писать.
Dimich
Нет, gcc9 нужен именно для __PRETTY_FUNCTION__
#include <iostream> enum class Enum123 { ELEM1, ELEM2, ELEM3 }; template <typename T, T Elem> void f() { std::cout << __PRETTY_FUNCTION__ << std::endl; } int main( ) { f<Enum123, Enum123::ELEM2>( ); return 0; }
Вывод gcc-9:
void f() [with T = Enum123; T Elem = Enum123::ELEM2]
Вывод gcc-8:
void f() [with T = Enum123; T Elem = (Enum123)1]
Dimich
> Ты наркоман?
Нет, ты. Перед тем как оскорблять кого-то, убеждайся в том, что сам не колешься хотя бы.
MATov
Ты дебил? Он ведь не утверждал, а спросил. Подобные вопросы являются неотъемлемой особенностью рускоязычных форумов и служат для более конструктивного хода обсуждения.
CapSopener
Тема вроде бы не во флэйме. Так что ваш пассаж с попыткой оправдать мудачество сотоварища не засчитывается :)
CapSopener
> Подобные вопросы являются неотъемлемой особенностью рускоязычных форумов и
> служат для более конструктивного хода обсуждения.
Подобные вопросы выдают недалёкость собеседника и совершенно не способствуют нормальному ведению диалога для вменяемых людей, но тебе этого не понять, как и товарищу твоему. И вместо оправданий хамского общения сходили бы лучше пролечились оба.
MATov
Пожалуй, действительно, не лучшая идея без причины называть человека дебилом/наркоманом. Прости.
Спим дальше, обновил только что либку. Добавил сахарок для битфлагов, красота вышла неописуемая! :) Примерчики из readme:
Раз:
Два:
MATov
> Добавил сахарок для битфлагов, красота вышла неописуемая!
нет, налил воды на ровном месте
ps. смешиваешь макросы и шаблоны, надеюсь твой код дебажить будешь только ты.
ps2. и компилить каждый раз не скучно