#include <string>
using namespace std;
#define ENUMCLASSHELP(Enum, name) case Enum::##name: return #name;
#define ENUMLOOP(Enum, name) ENUMCLASSHELP(Enum, name)
#define ENUMLOOP2(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP(Enum, ##__VA_ARGS__)
#define ENUMLOOP3(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP2(Enum, ##__VA_ARGS__)
#define ENUMLOOP4(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP3(Enum, ##__VA_ARGS__)
#define ENUMLOOP5(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP4(Enum, ##__VA_ARGS__)
#define ENUMLOOP6(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP5(Enum, ##__VA_ARGS__)
#define ENUMLOOP7(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP6(Enum, ##__VA_ARGS__)
#define ENUMLOOP8(Enum, name, ...) ENUMCLASSHELP(Enum, name) ENUMLOOP7(Enum, ##__VA_ARGS__)
#define ENUMCLASS(Enum, count, ...) enum class Enum{ __VA_ARGS__ }; \
string toString(Enum e) { switch (e){ ENUMLOOP##count(Enum, ##__VA_ARGS__) } }
ENUMCLASS(E_test, 3, a, b, c);
ENUMCLASS(E_test2, 8, a1, a2, a3, a4, a5, a6, a7, a8);
ENUMLOOP8(temp, a, b, c, d, e, f);
헬프
clang으로 풀어보면 맨첨에꺼 Enum::##name만 Enum::name으로 고쳐주면 잘 풀리는데
비쥬얼 스튜디오 문제인가
나는 문제 없는데 g++ 에 -E 옵션 주고 확인해봐ㅇㅅㅇ
g++이 뭐야
https://stackoverflow.com/a/8979018
요거대로 해서 확인해봐ㅇㅅㅇ
디폴트로 #define m(x) x m(int)main( ) { return 0; } 이거 잘되는데?