最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++11?實(shí)現(xiàn)枚舉值到枚舉名的轉(zhuǎn)換問題

 更新時(shí)間:2022年03月11日 17:00:25   作者:hchlqlz  
這篇文章主要介紹了c++11?實(shí)現(xiàn)枚舉值到枚舉名的轉(zhuǎn)換,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

效果

ENUM_DEFINE ( Color,
    Red,
    Blue,
)

EnumHelper(Color::Red) -> "Red"
EnumHelper(Color::Red, std::toupper) -> "RED"

關(guān)鍵技術(shù)

__VA_ARGS__

__VA_ARGS__ 實(shí)現(xiàn)了可變參數(shù)的宏。

#define XXX(type, ...) enum class type { __VA_ARGS__ };

XXX(Color, Red, Blue) 等價(jià)于:

enum class Color
{
    Red,
    Blue
};

#__VA_ARGS__

#__VA_ARGS__ 可將宏的可變參數(shù)轉(zhuǎn)為字符串。

#define XXX(type, ...) #__VA_ARGS__

XXX(Color, Red, Blue) 等價(jià)于:"Red, Blue"

在函數(shù)外執(zhí)行代碼的能力

在函數(shù)體外,可以通過定義全局變量來執(zhí)行一個(gè)函數(shù)。需要注意的是,頭文件中正常是不能進(jìn)行變量初始化的,除非加上 static 或者 const。

const int temp = initialize();

另外,如果多個(gè)代碼文件 #include 了該頭文件,會(huì)產(chǎn)生多個(gè)變量,即在不同代碼文件取得的 temp 變量不是同一個(gè)。與之對(duì)應(yīng),initialize 函數(shù)也會(huì)調(diào)用多次。

模板函數(shù)的靜態(tài)變量

函數(shù)的靜態(tài)變量可以用于存放枚舉值到枚舉字符串的映射,而將枚舉類型作為模板參數(shù)的模板函數(shù),則可以直接為每種枚舉提供了一個(gè)映射容器。

關(guān)鍵代碼

template<typename T>
string EnumHelper(T key, const std::function<char(char)> processor = nullptr, const char* pszName = NULL)
{
    static_assert(std::is_enum_v<T>, __FUNCTION__ "'s key need a enum");

    static map<T, string> s_mapName;
    if (nullptr != pszName)
    {
        s_mapName[key] = pszName;
    }
    std::string res = "";
    auto it = s_mapName.find(key);
    if (it != s_mapName.end())
        res = it->second;
    if (nullptr != processor)
        std::transform(res.begin(), res.end(), res.begin(), processor);
    return res;
}
template <class T>
size_t analystEnum(T enumClass, const char* pszNames)
    static_assert(std::is_enum_v<T>, __FUNCTION__ "'s enumClass need a enum");
    cout << "analystEnum: " << pszNames << endl;
    if (nullptr != pszNames)
        const vector<string>& vecName = split(pszNames, ",");
        for (int i = 0; i < vecName.size(); ++i)
        {
            if (vecName.at(i).size() > 0)
            {
                EnumHelper((T)(i + 1), nullptr, vecName.at(i).c_str() + (i == 0 ? 0 : 1) );
            }
        }
        return rand();
    return rand();
#define ENUM_DEFINE(type, ...) enum class type { placeholder, __VA_ARGS__ }; static const size_t g_uEnumSizeOf##type = analystEnum(type::placeholder, #__VA_ARGS__);

源碼地址

到此這篇關(guān)于c++11 實(shí)現(xiàn)枚舉值到枚舉名的轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)c++11 枚舉值到枚舉名的轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談C++內(nèi)存管理基礎(chǔ)知識(shí)

    淺談C++內(nèi)存管理基礎(chǔ)知識(shí)

    這篇文章主要為大家介紹了C++的內(nèi)存管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • c++ 虛繼承,多繼承相關(guān)總結(jié)

    c++ 虛繼承,多繼承相關(guān)總結(jié)

    這篇文章主要介紹了c++虛繼承,多繼承相關(guān)總結(jié),幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++設(shè)計(jì)模式中的橋模式你了解嗎

    C++設(shè)計(jì)模式中的橋模式你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式中的橋模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 如何在Qt中實(shí)現(xiàn)關(guān)于Json?的操作

    如何在Qt中實(shí)現(xiàn)關(guān)于Json?的操作

    JSON是一種輕量級(jí)數(shù)據(jù)交換格式,常用于客戶端和服務(wù)端的數(shù)據(jù)交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實(shí)現(xiàn)關(guān)于Json的操作,需要的朋友可以參考下
    2023-08-08
  • C++ Boost Archive超詳細(xì)講解

    C++ Boost Archive超詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-12-12
  • 如何通過指針突破C++類的訪問權(quán)限

    如何通過指針突破C++類的訪問權(quán)限

    這篇文章主要介紹了通過指針突破C++類的訪問權(quán)限,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 詳解C語言中的Static關(guān)鍵字

    詳解C語言中的Static關(guān)鍵字

    這篇文章主要為大家介紹了C語言中Static關(guān)鍵字,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • QT網(wǎng)絡(luò)編程Tcp下C/S架構(gòu)的即時(shí)通信實(shí)例

    QT網(wǎng)絡(luò)編程Tcp下C/S架構(gòu)的即時(shí)通信實(shí)例

    下面小編就為大家?guī)硪黄猀T網(wǎng)絡(luò)編程Tcp下C/S架構(gòu)的即時(shí)通信實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • C語言俄羅斯方塊游戲課程設(shè)計(jì)

    C語言俄羅斯方塊游戲課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言俄羅斯方塊游戲課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++中g(shù)etline()、gets()等函數(shù)的用法詳解

    C++中g(shù)etline()、gets()等函數(shù)的用法詳解

    這篇文章主要介紹了C++中g(shù)etline()、gets()等函數(shù)的用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

荥经县| 开鲁县| 巫溪县| 宿迁市| 资中县| 惠州市| 久治县| 久治县| 克东县| 黄山市| 肥乡县| 阳山县| 塔河县| 水城县| 诸暨市| 新绛县| 老河口市| 湘阴县| 阳高县| 喜德县| 阳城县| 大英县| 阿勒泰市| 长子县| 页游| 乾安县| 汉川市| 台北市| 溧水县| 丹阳市| 潜山县| 博爱县| 宁海县| 霍邱县| 调兵山市| 芦溪县| 武安市| 兴和县| 突泉县| 星子县| 栾川县|