亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在現代C ++ 11 / C ++ 14 / C ++ 17和未來的C ++ 20中枚舉到字符串

在現代C ++ 11 / C ++ 14 / C ++ 17和未來的C ++ 20中枚舉到字符串

C++
桃花長相依 2019-08-06 13:00:12
在現代C ++ 11 / C ++ 14 / C ++ 17和未來的C ++ 20中枚舉到字符串優雅的方式使用C ++ 11,C ++ 14或C ++ 17新功能或者在Boost中即可使用的東西還有其他計劃用于C ++ 20的東西例一個例子通常比長期解釋更好。您可以在Coliru上編譯并運行此代碼段。(另一個前例子也可用)#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';}約束請不要重復其他答案或基本鏈接。請避免膨脹的基于宏的答案,或嘗試盡可能減少#define開銷。請不要手動enum- > string映射。很高興有支持enum從不同于零的數字開始的值支持負的enum值支持零碎的enum價值觀支持class enum(C ++ 11)支持class enum : <type>任何允許<type>(C ++ 11)編譯時(不是運行時)轉換為字符串,或至少在運行時快速執行(例如,std::map這不是一個好主意......)constexpr (C ++ 11,在C ++中放松14)noexcept (C ++ 11)片段C ++ 14 / C ++ 17友好C ++ 最先進的技術一個可能的想法是使用C ++編譯器功能在編譯時使用基于variadic template class和constexpr函數的元編程技巧生成C ++代碼......
查看完整描述

2 回答

  • 2 回答
  • 0 關注
  • 666 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號