#include <map>
#include <iostream>
struct MyClass
{
enum class MyEnum : char {
AAA = -8,
BBB = '8',
CCC = AAA + BBB
};
};
// Replace magic() by some faster compile-time generated code
// (you're allowed to replace the return type with std::string
// if that's easier for you)
const char* magic (MyClass::MyEnum e)
{
const std::map<MyClass::MyEnum,const char*> MyEnumStrings {
{ MyClass::MyEnum::AAA, "MyClass::MyEnum::AAA" },
{ MyClass::MyEnum::BBB, "MyClass::MyEnum::BBB" },
{ MyClass::MyEnum::CCC, "MyClass::MyEnum::CCC" }
};
auto it = MyEnumStrings.find(e);
return it == MyEnumStrings.end() ? "Out of range" : it->second;
}
int main()
{
std::cout << magic(MyClass::MyEnum::AAA) <<'\n';
std::cout << magic(MyClass::MyEnum::BBB) <<'\n';
std::cout << magic(MyClass::MyEnum::CCC) <<'\n';
}
枚举
值从不同于零的数字开始枚举
值枚举
值类枚举
(C++11)类枚举:
具有任何允许的
(C++11)std::map
不是个好主意……)constexpr
(C++11,然后在C++14/17/20中放松)除了
(C++11)一个可能的想法是使用C++编译器的功能,在编译时使用基于variadic模板类
和constexpr
函数的元编程技巧生成C++代码...
#include <magic_enum.hpp>
enum Color { RED = 2, BLUE = 4, GREEN = 8 };
Color color = Color::RED;
auto color_name = magic_enum::enum_name(color);
// color_name -> "RED"
std::string color_name{"GREEN"};
auto color = magic_enum::enum_cast<Color>(color_name)
if (color.has_value()) {
// color.value() -> Color::GREEN
};
有关更多示例,请查看home repository https://github.com/neargye/magic_enum。
这个库使用编译器特定的hack(基于__pretty_function__
/__funcsig__
),它适用于Clang>=5、MSVC>=15.3和GCC>=9。
枚举值必须在范围[MAGIC_ENUM_RANGE_MIN,MAGIC_ENUM_RANGE_MAX]
中。
#include <magic_enum.hpp>
enum number { one = 100, two = 200, three = 300 };
namespace magic_enum {
template <>
struct enum_range<number> {
static constexpr int min = 100;
static constexpr int max = 300;
};
}
主要内容:转换为C风格的字符串,string 字符串的输入输出,访问字符串中的字符,字符串的拼接,string 字符串的增删改查C++ 大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的 string 类。string 类处理起字符串来会方便很多,完全可以代替C语言中的字符数组或字符串 指针。 string 是 C++ 中常用的一个类,它非常重要,我们有必要在此单独讲解一下。 使用 string 类需要包含头文件 ,下面的例子介绍了几种定义 string 变量(对象)的方法:
主要内容:1、声明和初始化字符串,2、String 类中的属性,3、String 类中的方法在 C# 中,string(或 String)关键字是 System.String 类的别名,其中提供了定义字符串以及操作字符串的一系列方法,下面就来详细介绍一下。 1、声明和初始化字符串 您可以使用以下方式来创建字符串 为 String 类型的变量赋值一个字符串; 使用 String 类的构造函数; 使用字符串串联运算符; 通过检索属性或调用返回字符串的方法; 通过调用格式化方法将值或对象转换为
C++ 提供了以下两种类型的字符串表示形式: C 风格字符串 C++ 引入的 string 类类型 C 风格字符串 C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。 下面的声明和初始化创建了一个 "Hello" 字符串。由于在数组的末尾存储了空字符,所以字
本文向大家介绍C/C++字符串与数字互转的实现,包括了C/C++字符串与数字互转的实现的使用技巧和注意事项,需要的朋友参考一下 C数字转字符串 C字符串转数字 C++字符串转数字 C++11增加std::stoi/stol/stoll等等函数可以 转换 C++数字转字符串 C++11增加了全局函数std::to_string,以及std::stoi/stol/stoll等等函数 string和ch
我想找到最快的方法来检查标准C 11、14、17或C中是否存在文件。我有数千个文件,在对它们执行操作之前,我需要检查它们是否都存在。在下面的函数中,我可以写什么来代替*/?
本文向大家介绍C和C++11之enum枚举的具体使用方法,包括了C和C++11之enum枚举的具体使用方法的使用技巧和注意事项,需要的朋友参考一下 一、前言 由于C++项目中用了相对比较多的枚举(enum),正常情况下,枚举变量都是占用一个整形类型的大小,但是项目中枚举(enum)只需要使用到一个字节的大小,因为是在嵌入式设备上执行的代码,资源比较少,那么如果枚举都是按照int型大小来使用的话,这