c++ - 我如何在 C++ 中使用 'ToString()' 枚举?

标签 c++

<分区>

如何在 C++ 中“ToString()”一个枚举?

在 Java 和 C# 中,我只调用 ToString。

enum Colours
{
    Red =0,
    Green=1,
    Blue=2
};

我需要创建一个字符串,例如:“Invalid color '” + color + “' selected。”

最佳答案

虽然这通常是通过开关完成的,但我更喜欢数组:

#include <iostream>

namespace foo {
  enum Colors { BLUE = 0, RED, GREEN, SIZE_OF_ENUM };
  static const char* ColorNames[] = { "blue", "red", "green" };

  // statically check that the size of ColorNames fits the number of Colors
  static_assert(sizeof(foo::ColorNames)/sizeof(char*) == foo::SIZE_OF_ENUM
    , "sizes dont match");
} // foo

int main()
{
  std::cout << foo::ColorNames[foo::BLUE] << std::endl;
  return 0;
}

显式数组大小有利于生成编译时间 如果枚举的大小发生变化而您忘记添加错误 适当的字符串。

或者,Boost 库中有 Boost.Enum。图书馆 尚未正式发布但相当稳定并提供什么 你要。不过,我不会向新手推荐它。

关于c++ - 我如何在 C++ 中使用 'ToString()' 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150538/

相关文章:

c++ - 如何在Qt主窗口中显示QWebEngineView?

c++ - 基于c++底层复合模式的图形编辑器开源项目示例

c++ - 使用友元函数重载运算符[]

c++ - 2种循环方式的速度比较

java - 如何从 C++ 应用程序启动 Java 应用程序、传递参数并等待 Java 应用程序的结果?

c++ - else if作为逻辑语句怎么写?

c++ - 在没有 UTC 时区的正确时间总和

c++ - 类名关联

c++ - 在 C++ 中创建对象

c++ - 嵌套的 catch 运算符