Инициализация перечислимого класса как ноль - PullRequest
0 голосов
/ 17 марта 2020

Мне интересно, возможно ли инициализировать перечислимый класс как ноль. Я написал короткий пример, чтобы проиллюстрировать, о чем я спрашиваю.

У меня здесь есть заголовок, который определяет класс enum с именем ColorOptions

#ifndef COLORS_HPP
#define COLORS_HPP

enum class ColorOptions
{
  RED,
  BLUE
};
#endif

, и у меня также есть класс который использует этот класс перечисления для печати цветов на основе значения перечисления

#include "Colors.hpp"
#include <iostream>

void printColor(ColorOptions col);

int main()
{
  printColor(ColorOptions::RED);
  printColor(ColorOptions::BLUE);
}

void printColor(ColorOptions col)
{
  switch(col)
  {
  case ColorOptions::RED:
    std::cout << "The color is red" << std::endl;
    break;
  case ColorOptions::BLUE:
    std::cout << "The color is blue" << std::endl;
    break;
  default:
    std::cout << "The color is unknown" << std::endl;
  }
}

Возможно ли в этом случае инициализировать ColorOptions как что-то отличное от RED или BLUE? Я хочу достичь значения по умолчанию для метода printColor, но я не уверен, возможно ли это без добавления другого типа в перечисление ColorOptions.

1 Ответ

3 голосов
/ 17 марта 2020

Чтобы получить значение, отличное от допустимых перечислений, используйте static_cast. Это будет выглядеть как

printColor(static_cast<ColorOptions>(5));

и будет выводить

The color is unknown

Если вы можете использовать C ++ 17, тогда вы могли бы сделать что-то вроде:

enum class ColorOptions
{
  NONE,
  RED,
  BLUE
};

и затем вы можете вызвать вашу функцию, например

printColor({});

, которая даст вам неявное значение NONE и приведет к печати The color is unknown.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...