Базовое наследование перечислимого класса

Похожий OpenCV обнаружение контуров - это путь.

не выглядит так плохо, как отправная точка:

enter image description here

, используя этот первый шаг

ret,thresh1 = cv2.threshold(img,220,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,220,255,cv2.THRESH_BINARY_INV)

72
задан Stephen Kennedy 9 November 2018 в 17:35
поделиться

5 ответов

Не возможный. Нет никакого наследования с перечислениями.

можно вместо этого использовать классы с именованной константой ints.

Пример:

class Colors
{
public:
  static const int RED = 1;
  static const int GREEN = 2;
};

class RGB : public Colors
{
  static const int BLUE = 10;
};


class FourColors : public Colors
{
public:
  static const int ORANGE = 100;
  static const int PURPLE = 101;
};
62
ответ дан Brian R. Bondy 24 November 2019 в 12:33
поделиться
#include <iostream>
#include <ostream>

class Enum
{
public:
    enum
    {
        One = 1,
        Two,
        Last
    };
};

class EnumDeriv : public Enum
{
public:
    enum
    {
        Three = Enum::Last,
        Four,
        Five
    };
};

int main()
{
    std::cout << EnumDeriv::One << std::endl;
    std::cout << EnumDeriv::Four << std::endl;
    return 0;
}
90
ответ дан Mykola Golubyev 24 November 2019 в 12:33
поделиться

Невозможный.
, Но можно определить перечисление анонимно в классе, затем добавить дополнительные перечислимые константы в производных классах.

0
ответ дан NmdMystery 24 November 2019 в 12:33
поделиться

Вы не можете сделать это напрямую, но вы можете попробовать использовать решение из это статья.

Основная идея состоит в том, чтобы использовать вспомогательный шаблонный класс, который содержит значения перечисления и имеет оператор приведения типа. Учитывая, что базовым типом для enum является int , вы можете легко использовать этот класс-держатель в своем коде вместо enum.

10
ответ дан 24 November 2019 в 12:33
поделиться

Что ж, если вы определите перечисление с тем же именем в производном классе и начнете его с последнего элемента соответствующего перечисления в базовом классе, вы получите почти то, что вы хотите - унаследованный enum. Взгляните на этот код:

class Base
{
public:
enum ErrorType
  {
  GeneralError,
  NoMemory,
  FileNotFound,
  LastItem
  }
}

class Inherited: public Base
{
enum ErrorType
  {
  SocketError = Base::LastItem,
  NotEnoughBandwidth,
  }
}
2
ответ дан 24 November 2019 в 12:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: