#include <iostream>
enum class pin_type: uint8_t
{
d0, d1, d2, a0 = 10, a1,
};
enum class digital_pin_type: uint8_t {
d0, d1, d2,
};
enum class analog_pin_type: uint8_t {
a0 = 10, a1,
};
int main()
{
pin_type pin = static_cast<pin_type>(analog_pin_type::a0); // ok
digital_pin_type dpin = static_cast<digital_pin_type>(pin_type::d1); // ok
analog_pin_type apin = static_cast<analog_pin_type>(pin_type::d1); // logic error, but works
std::cout << (size_t)pin << " " << (size_t)dpin << " " << (size_t)apin;
return 0;
}
Однако в нем отслеживание на правильность связи между перечислениями ложится на разработчика. Поэтому хочется иметь возможность указать зависимость (наследование) одного перечисления от другого. Ожидаемый код:
Не хватает наследования
enum class
.На данный момент возможен следующий код:
Однако в нем отслеживание на правильность связи между перечислениями ложится на разработчика. Поэтому хочется иметь возможность указать зависимость (наследование) одного перечисления от другого. Ожидаемый код:
Ожидаемые свойства: