열거형 변수를 문자열로 변환하는 것은 프로그래밍의 일반적인 요구 사항입니다. 예를 들어, 열거형 값을 읽을 수 있는 형식으로 인쇄하거나 문자열 인수가 필요한 함수에 이를 매개변수로 전달할 때 필요합니다.
열거형에 대한 간단한 접근 방식 중 하나 유형 변환은 각 열거형에 대해 수동 함수를 작성하는 것입니다. 예를 들어 OS_type 열거형을 변환하려면 다음과 같이 하세요.
enum OS_type { Linux, Apple, Windows }; inline const char* ToString(OS_type v) { switch (v) { case Linux: return "Linux"; case Apple: return "Apple"; case Windows: return "Windows"; default: return "[Unknown OS_type]"; } }
그러나 이 접근 방식은 열거형 수가 증가함에 따라 유지 관리 문제가 발생하기 쉽습니다.
Boost.Preprocessor 라이브러리는 열거형 유형 변환을 처리하는 보다 우아하고 자동화된 방법을 제공합니다. 전처리기를 활용하여 변환 함수를 동적으로 생성합니다. 다음 두 개의 매크로가 이를 달성합니다.
#define X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE(r, data, elem) \ case elem : return BOOST_PP_STRINGIZE(elem); #define DEFINE_ENUM_WITH_STRING_CONVERSIONS(name, enumerators) \ enum name { \ BOOST_PP_SEQ_ENUM(enumerators) \ }; \ \ inline const char* ToString(name v) \ { \ switch (v) \ { \ BOOST_PP_SEQ_FOR_EACH( \ X_DEFINE_ENUM_WITH_STRING_CONVERSIONS_TOSTRING_CASE, \ name, \ enumerators \ ) \ default: return "[Unknown " BOOST_PP_STRINGIZE(name) "]"; \ } \ }
이러한 매크로를 사용하여 OS_type 열거형을 다음과 같이 정의할 수 있습니다.
DEFINE_ENUM_WITH_STRING_CONVERSIONS(OS_type, (Linux)(Apple)(Windows))
In C에서는 ToString 함수를 사용하여 열거형 값을 다음으로 변환할 수 있습니다. 문자열:
#include <iostream> int main() { OS_type t = Windows; std::cout << ToString(t) << " " << ToString(Apple) << std::endl; }
C의 경우 ToString 함수는 함수 오버로드 대신 매크로로 구현될 수 있습니다.
#define ToString(t) \ [Unknown ""##t] [Linux "Linux"] [Apple "Apple"] [Windows "Windows"]
이 기사에서는 두 가지를 제시했습니다. 열거형 변수를 문자열로 변환하는 방법: 수동 함수를 사용하는 순진한 접근 방식과 Boost.Preprocessor를 사용한 전처리기 기반 솔루션. 전처리기 기반 접근 방식은 특히 많은 수의 열거형을 처리할 때 더욱 강력하고 유지 관리가 더 쉽습니다.
위 내용은 C 및 C에서 Enum 유형을 문자열로 효율적으로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!