考虑一下,我得到了以下枚举类:
enum class TestEnum
{
None = 0,
Foo,
Bar
};
我想指定ostream操作符(
std::cout << "This is " << TestEnum::Foo;
并获得以下输出,这是Foo。
我的问题是:
是否有存储枚举“名称说明符”的地方?(即,对于枚举类TestEnum,它是None、Foo和Bar),因此我可以编写一个函数(或者至多是函数模板)来指定TestEnum的ostream操作符,例如:
std::ostream& operator<< ( std::ostream& os, TestEnum aEnum ) {
return std::string( aEnum.name() );
}
到目前为止,我是这样做的:
std::ostream& operator<< ( std::ostream& os, TestEnum aEnum ) {
switch( aEnum )
{
case TestEnum::Foo:
os << "Foo";
break;
case TestEnum::Bar:
os << "Bar"
break;
}
return os;
}
我见过一些使用boop
库的解决方案,但这次我不希望使用它。
是否有任何存储枚举“名称说明符”的地方?
不,名称不会保存在任何位置。如果需要,需要(不幸的是)对它们进行映射。
如果枚举值可用于数组索引(如OP的情况),则可以使用std::string\u视图数组进行映射(需要c 17或更高版本,否则为std::string数组)。
array的使用使以下解决方案变得轻量级和O(1)查找。
#include <iostream>
#include <string_view>
#include <type_traits> // std::underlying_type_t
using namespace std::string_view_literals;
enum struct TestEnum { None = 0, Foo, Bar };
inline static constexpr std::string_view enumArray[]{"None"sv, "Foo"sv, "Bar"sv};
std::ostream& operator<< (std::ostream& os, TestEnum aEnum)
{
return os << enumArray[static_cast<std::underlying_type_t<TestEnum>>(aEnum)];
}
int main()
{
std::cout << "This is " << TestEnum::Foo; // prints: "This is Foo"
std::cout << "This is " << TestEnum::Bar; // prints: "This is Bar"
}
查看演示
是否有任何存储枚举“名称说明符”的地方?
不,但有一个选项是使用标准::映射
enum class TestEnum
{
None = 0,
Foo,
Bar
};
const std::map<TestEnum,std::string> myMap{{TestEnum::None, "None"},
{TestEnum::Foo, "Foo"},
{TestEnum::Bar, "Bar"}};
std::ostream& operator<< ( std::ostream& os, TestEnum aEnum )
{
os << myMap.at(aEnum);
return os;
}
int main()
{
std::cout << "This is " << TestEnum::Foo; //prints This is Foo
std::cout << "This is " << TestEnum::Bar; //prints This is Bar
return 0;
}
演示
我有一个枚举文件,在其中我为PaymentTypes定义了一个对象: 这样我就有了可以使用的东西:
我有一个枚举,我想让这些枚举类型在开关情况下成为字符串。 因此,在上面我硬编码“Mon”,而不是有一种方法,我们可以直接将枚举类型作为字符串。就目前而言,如果我在交换机案例中传递枚举类型,我将获得id 0、1或2,但我需要Mon/Tue/Wed作为字符串
问题内容: 当用户登录时,我正在设置一个sessionScope对象,并且那个bean对象由几个其他bean组成。这些bean的属性之一是枚举,但是我发现EL无法获取enum类的属性,而只能获取Java bean对象的属性。因此,我决定为该枚举创建一个bean类,并将该枚举嵌套在该bean类中。我为替换枚举而制作的java bean,以便可以通过EL获得其值,如下所示: 但是,当我尝试访问等级名称
在angular 12应用程序上,我有enum: 我尝试如下定义Policy类型的变量: < code>route.data.policy的类型是< code>any。但是我得到了错误: 元素隐式具有“任何”类型,因为索引表达式不是“数字”类型。 如何将route.data.policy的值解析为枚举的< code>'Admin'或< code>'Manager'?
本文向大家介绍Java将枚举转换为字符串,包括了Java将枚举转换为字符串的使用技巧和注意事项,需要的朋友参考一下 示例 有时您想将枚举转换为String,有两种方法可以实现。 假设我们有: 那么,我们如何将类似的东西转换Fruit.APPLE为"APPLE"? 使用转换 name() name()是一个内部方法,enum该方法返回String枚举的表示形式,返回值精确String表示枚举值的定义
例如,我如何做类似的事情: 结果示例: