我创建了一个枚举名称颜色。然后制作一个颜色类型的变量background\u color
。然后分配一个枚举值,假设为蓝色。然后我想用cout
打印background\u color
。但它会打印枚举成员的相应int值。我想知道是否有任何操纵器可以将背景颜色
打印为字符串。我知道我可以用开关箱来达到这个目的。但我希望我能用cout
和操纵器获得这个。
#include <iostream>
using namespace std;
int main()
{
enum color
{
red,blue,black
};
color background_color=blue;
cout << background_color;
return 0;
}
我希望将蓝色打印为输出,而不是1。A.
我想知道是否有任何操纵器将背景颜色打印为字符串。
一个简单的答案:据我所知,没有一个操纵器可以直接为您执行此操作。然而,有很多工具和方法可以实现你想要的。有人已经建议使用std::map
。这是一种有效的可行方法,其他许多方法各有利弊。这取决于你来平衡这些差异。
我没有使用std::map
而是选择使用static const std::array
。我还决定将枚举放在包含构造函数和两个变量的结构中。它所属的类型及其名称的字符串。然后我创建了一个重载的操作符
下面是我的代码的样子:
测验H
#include <array>
#inlucde <iostream>
#include <string>
// must match the size and order of
// the enumeration in the Color Struct
static const std::array<std::string, 8> name {
"Black",
"Red",
"Orange",
"Yellow",
"Green",
"Blue",
"White",
"Invalid"
};
struct Color {
enum Type {
BLACK,
RED,
ORANGE,
YELLOW,
GREEN,
BLUE,
WHITE,
INVALID,
} type_;
std::string name_;
explicit Color(Color::Type ty = INVALID) : type_(ty), name_(name[ty] ) {}
};
std::ostream& operator<<(std::ostream& os, const Color& color );
测验cpp
#include "Test.h"
std::ostream& operator<<(std::ostream& os, const Color& color) {
return os << color.name_;
}
主要的cpp
#include "Test.h"
int main() {
Color blank;
Color red(Color::RED);
Color white(Color::WHITE);
Color blue(Color::BLUE);
std::cout << blank << " "
<< red << " "
<< white << " "
<< blue << '\n';
return EXIT_SUCCESS;
}
输出
Invalid Red White Blue
我选择阵列而不是地图,因为它有更快的访问时间。我还选择将其设置为const static,这样它只需初始化一次!这些是我的方法的优点。
缺点是数组是const,不能修改,也不能插入数组。但是,由于我们要处理的是枚举,这不应该是一个问题,因为在枚举被声明后,您不能添加到枚举,因为它是一个整体类型,而不是容器。
这种方法的另一个优点是不必担心使用switch语句。这里唯一的缺点是两个变量的存储空间,一个枚举类型和一个字符串,但这不会对内存占用造成很大影响,除非您存储的是数百万或数十亿种颜色。
当您知道应用程序将要支持的对象数量有限或指定时,上面的设计结构非常适合。即使您声明了100种预定义颜色,这种方法仍然是可管理的。
另一方面,如果要存储数千或上万种不同的颜色,那么std::map可能更有意义。在这种情况下,您可以声明一个
静态映射
可以创建执行此操作的宏。
#define ENUM_TO_STRING(var) (#var)
然后,当你想用它的时候,
enum Test
{
Test_A,
Test_B
}
int main()
{
std::cout << ENUM_TO_STRING(Test_A) << std::endl;
return 1;
}
但这对存储在变量中的枚举不起作用。
没有,但是您可以使用std::map
保存颜色和名称。
#include <iostream>
#include <map>
#include <string>
enum color { red, blue, black };
std::map<color, std::string> color_names{ { red, "red"}, { blue, "blue"}, { black, "black"} };
int main()
{
std::cout << "my favorite color is " << color_names[red] << '\n';
}
我在php中有一个布尔值。当我做以下事情时: 我得到类似于或的东西。有没有简单的方法来获得或
“String”类型的参数不能分配给“Types”类型的参数。
问题内容: 我觉得这是一个简单的问题,但是我尝试过的所有事情都不适合我。我有一个枚举,我有字符串构造函数的原因是因为Java不允许枚举为数字..我在没有字符串构造函数的情况下直接尝试了AA,AB,2C,但这给出了错误。请注意,对于现有的枚举,我要添加C(“ 2C”)。 现在我有一个mybatis映射器,它会进行合并,这是现有的,并且映射器的参数之一是TestEnum。到目前为止,由于枚举值和字符串
本文向大家介绍Java将枚举转换为字符串,包括了Java将枚举转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例 有时您想将枚举转换为String,有两种方法可以实现。 假设我们有: 那么,我们如何将类似的东西转换Fruit.APPLE为"APPLE"? 使用转换 name() name()是一个内部方法,enum该方法返回String枚举的表示形式,返回值精确String表示枚举值的定义
问题内容: 我知道该信息在枚举中可用。 如何打印所有枚举值,如:? 输出: 姓名 教育 电子邮件 电话 如何在另一个函数中将该枚举作为arg 传递? 问题答案: 您的第二部分…与或一样
是否有一种方法可以将所有枚举显示为swagger中的字符串值,而不是int值? 我希望能够提交POST操作并根据它们的字符串值放置枚举,而不必每次都查看枚举。 我尝试了,但服务器随后接收字符串而不是我们正在寻找的枚举值。 有人解决过这个吗? 编辑: