Как написать пользовательские преобразования типов для перечислений? - PullRequest
0 голосов
/ 28 апреля 2020

Допустим, у меня есть следующее перечисление:

enum fruit { apple, oranges };

Я хотел бы написать оператор, который позволяет мне писать

fruit f = fruit::apple;
std::string s = f; // "Apple"

Для класса я бы реализовал Пользовательский оператор приведения . Как я могу сделать это для перечисления?

Также сравните этот пост , который (вроде) отвечает на вопрос для enum class.

1 Ответ

1 голос
/ 28 апреля 2020

Один из способов сделать это - получить бесплатную функцию для преобразования:

#include <cstdio>

enum class fruit { apple, oranges };  // prefer scoped enums

[[nodiscard]] constexpr char const* fruitName(fruit const f) noexcept {
  switch (f) {
    case fruit::apple: return "Apple";
    case fruit::oranges: return "Oranges";
    // most compilers will warn if you don't add all enum values
  }
  return "Error";
}

int main() {
  fruit f = fruit::apple;
  std::puts(fruitName(f));  // prints "Apple"
}
...