假設我已經寫了以下內容:我可以使用它們的標識符來取消枚舉嗎?
enum class Color { Red, Green, Blue, };
template <Color c> Color foo() { return c; }
template Color foo<Color::Green>();
並編譯它。當我看到我的編譯代碼的objdump的,我得到:
[[email protected] /tmp]$ objdump -t f.o | grep "\.text\." | sed 's/^.*\.text\.//;' | c++filt
Color foo<(Color)1>()
Color foo<(Color)1>() 000000000000000b Color foo<(Color)1>()
如果我使用abi::__cxa_demangle()
爲<cxxabi.h>
(GCC,也許是你的編譯器不同),這也是相似 - (Color)0
或Color)1
是模板參數,而不是Red
或Green
或Color::Red
或Color::Green
。
顯然,我不能讓名字受到我喜歡的方式的影響。但是 - 我真的很希望能夠獲得(或寫?)的demangling呼叫,而不是"Color foo<(Color)1>()"
回報"Color foo<(Color:Green>()"
(或"Color foo<(Green>()"
這是這是可行的變體
@SeverinPappadeux:見我的編輯。 – einpoklum
請檢查答案 –