문자열로의 간편한 C 열거형 변환
C 코드에서 명명된 열거형을 발견했다고 가정해 보겠습니다.
enum MyEnum { FOO, BAR = 0x50 };
그리고 각각에 대한 변환 기능을 갖춘 헤더를 생성하는 스크립트를 찾고 있습니다. enum:
char* enum_to_string(MyEnum t);
다음과 같이 간단한 구현을 사용하면
char* enum_to_string(MyEnum t){ switch(t){ case FOO: return "FOO"; case BAR: return "BAR"; default: return "INVALID ENUM"; } }
그러나 형식 정의된 열거형과 이름이 지정되지 않은 C 열거형을 사용하면 상황이 까다로워집니다. 최고의 솔루션을 살펴보겠습니다.
X-Macros: The Champion
X-Macros는 우아한 솔루션을 제공하는 최고의 선택으로 등장합니다.
#include <iostream> enum Colours { # define X(a) a, # include "colours.def" # undef X ColoursCount }; char const* const colours_str[] = { # define X(a) #a, # include "colours.def" # undef X 0 }; std::ostream& operator<<(std::ostream& os, enum Colours c) { if (c >= ColoursCount || c < 0) return os << "???"; return os << colours_str[c]; } int main() { std::cout << Red << Blue << Green << Cyan << Yellow << Magenta << std::endl; }
동봉파일 "colours.def" 보류:
X(Red) X(Green) X(Blue) X(Cyan) X(Yellow) X(Magenta)
문자열 출력 사용자 정의
유연성을 더하기 위해 문자열 출력을 조정할 수 있습니다.
#define X(a, b) a, #define X(a, b) b, X(Red, "red") X(Green, "green") // etc.
위 내용은 C 열거형을 문자열로 쉽게 변환하고 Typedef 및 명명되지 않은 열거형을 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!