c++11 实现枚举值到枚举名的转换

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)

{<br/>
    s_mapName[key] = pszName;<br/>
}

std::string res = “”;

auto it = s_mapName.find(key);<br/>
if (it != s_mapName.end())<br/>
{<br/>
    res = it-&gt;second;<br/>
}

if (nullptr != processor)

{<br/>
    std::transform(res.begin(), res.end(), res.begin(), processor);<br/>
}

return res;
} template &lt;class T&gt;
size_t analystEnum(T enumClass, const char* pszNames)
{

static_assert(std::is_enum_v&lt;T&gt;, __FUNCTION__ &#34;&#39;s enumClass need a enum&#34;);

cout &lt;&lt; “analystEnum: ” &lt;&lt; pszNames &lt;&lt; endl; if (nullptr != pszNames)

{<br/>
    const vector&lt;string&gt;&amp; vecName = split(pszNames, &#34;,&#34;);

for (int i = 0; i &lt; vecName.size(); ++i)

    {<br/>
        if (vecName.at(i).size() &gt; 0)<br/>
        {<br/>
            EnumHelper((T)(i + 1), nullptr, vecName.at(i).c_str() + (i == 0 ? 0 : 1) );<br/>
        }<br/>
    }

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);