Re[20]: enum class and if expression
От: B0FEE664  
Дата: 20.12.19 12:13
Оценка:
Здравствуйте, удусекшл, Вы писали:

BFE>>Проблема не в том, что придётся править, а в том, что если не поправишь, то заметишь только в рантайме.

У>Или не заметишь

enum'ы — это не графика, не время и не паралельное исполнение, так что всё отлавливается в тестах.
И каждый день — без права на ошибку...
Re[21]: enum class and if expression
От: boomer  
Дата: 20.12.19 15:21
Оценка: +1
Здравствуйте, B0FEE664, Вы писали:

BFE>Здравствуйте, удусекшл, Вы писали:


BFE>>>Проблема не в том, что придётся править, а в том, что если не поправишь, то заметишь только в рантайме.

У>>Или не заметишь

BFE>enum'ы — это не графика, не время и не паралельное исполнение, так что всё отлавливается в тестах.


Все равно, я так и не понял, зачем enum-ы использовать не для того, для чего они предназначены. Хочется битовые флаги — что мешает использовать обычный short/int/etc.?
Хочется типизированных флагов — написать свой класс или найти готовый библиотечный. Но нет. Надо грызть кактус и городить уродливый код, натягивая сову на глобус.
Re[22]: enum class and if expression
От: B0FEE664  
Дата: 20.12.19 16:23
Оценка: +1 :)
Здравствуйте, boomer, Вы писали:

BFE>>enum'ы — это не графика, не время и не паралельное исполнение, так что всё отлавливается в тестах.


B>Все равно, я так и не понял, зачем enum-ы использовать не для того, для чего они предназначены. Хочется битовые флаги — что мешает использовать обычный short/int/etc.?

B>Хочется типизированных флагов — написать свой класс или найти готовый библиотечный. Но нет. Надо грызть кактус и городить уродливый код, натягивая сову на глобус.

Кто-то из нас потерял нить разговора, потому что я так же против использования enum в качестве набора битовых флагов.
И каждый день — без права на ошибку...
Re: enum class and if expression
От: swingus  
Дата: 04.01.20 05:19
Оценка:
Я не парюсь и делаю так:


#include <type_traits>

template <typename T>
auto has_feature(T t, T f) -> bool
{ 
   return static_cast<std::underlying_type_t<T>>(t & f) != 0;
}


или


#include <type_traits>

template <typename T>
   requires 
    std::is_enum_v<T>
     && (T t, T f){ { t & f } -> T; }
auto has_feature(T t, T f) -> bool
{ 
   return static_cast<std::underlying_type_t<T>>(t & f) != 0;
}


или даже


#include <type_traits>
#include <concepts>

template <typename T>
   requires 
    (std::is_enum_v<T> || std::integral<T>)
     && (T t, T f){ { t & f } -> T; }
auto has_feature(T t, T f) -> bool
{ 
   return t & f != static_cast<T>(0);
}


Здравствуйте, удусекшл, Вы писали:

У>Здравствуйте


У>Как бы это правильно сделать?
Re: enum class and if expression
От: Erop Россия  
Дата: 05.01.20 23:31
Оценка:
Здравствуйте, удусекшл, Вы писали:

У>Сделал я enum class и сделал для него bitwise операторы, чтобы использовать в качестве флагов.


Можно просто старый enum сделать, погружённый в структуру, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.