Я часто сталкиваюсь с ситуацией, когда мы создаем класс, который воздействует на какое-то перечисление, но потом мы получаем его и хотим добавить в перечисление больше значений, не меняя базовый класс.
Я вижу этот вопрос из 2009 года: Наследование базового класса enum
Однако я знаю, что в C++ 11, 14, 17 был внесен ряд изменений в перечисление. Позволяют ли какие-либо из этих изменений расширить перечисления из базового класса в производный?
class Base
{
enum State {STATE_1, STATE_2, STATE_3};
};
class Derived : public Base
{
enum State {STATE_4};
};
... где мы хотим, чтобы производное имело перечисление, описывающее состояния, в которых оно может находиться, а именно: СОСТОЯНИЕ_1, СОСТОЯНИЕ_2, СОСТОЯНИЕ_3 и СОСТОЯНИЕ_4. На самом деле мы не хотим менять перечисление в базовом классе, потому что другие производные классы могут не иметь возможности находиться в STATE_4. Мы также не хотим создавать новое перечисление, потому что у нас уже есть одно для состояния в базе.
Используем ли мы вместо этого статические значения const, чтобы добиться этого 8 лет спустя?
class Base
{
static int STATE_1= 0;
static int STATE_2= 1;
static int STATE_3= 2;
};
class Derived : public Base
{
static int STATE_4= 3;
};
enumв 11-14-17? Я знаю, что они ввели строго типизированныйenum class, но я почти уверен, что простойenumостается в основном таким же, как и всегда. - person ShadowRanger   schedule 20.03.2017