C에서 if/switch 없이 열거형 값을 텍스트로 인쇄하기
C에서 열거형은 기호 이름에 정수 값을 할당하는 방법을 제공합니다. 그러나 열거형 값을 콘솔에 인쇄할 때 일반적으로 기호 이름 대신 연결된 정수를 출력합니다.
이 제한을 극복하고 열거형 값을 텍스트로 인쇄하려면 세 가지 효율적인 솔루션을 살펴보겠습니다.
1. 맵 사용:
std::map을 활용하면 해당 텍스트 표현에 대한 열거형 값을 효율적으로 조회할 수 있습니다.
#include <map> #include <string_view> enum Errors { ErrorA = 0, ErrorB, ErrorC }; // Custom insertion function for map #define INSERT_ELEMENT(p) result.emplace(p, #p); // Initialize the map static const auto strings = []() { std::map<Errors, std::string_view> result; INSERT_ELEMENT(ErrorA); INSERT_ELEMENT(ErrorB); INSERT_ELEMENT(ErrorC); return result; }; std::ostream& operator<<(std::ostream& out, const Errors value) { return out << strings[value]; }
2. 선형 검색과 함께 구조 배열 사용:
이 접근 방식에는 각각 열거형 값과 해당 텍스트가 포함된 구조 배열을 만드는 작업이 포함됩니다. 그런 다음 선형 검색을 사용하여 원하는 열거형 값에 대한 텍스트를 검색합니다.
#include <string_view> enum Errors { ErrorA = 0, ErrorB, ErrorC }; // Structure for mapping enum to text struct MapEntry { Errors value; std::string_view str; }; std::ostream& operator<<(std::ostream& out, const Errors value) { const MapEntry entries[] = { {ErrorA, "ErrorA"}, {ErrorB, "ErrorB"}, {ErrorC, "ErrorC"} }; const char* s = nullptr; for (const MapEntry* i = entries; i->str; i++) { if (i->value == value) { s = i->str; break; } } return out << s; }
3. 스위치/케이스 사용:
맵 접근 방식보다 덜 효율적이지만 스위치/케이스를 사용하여 열거형 값을 텍스트에 매핑할 수도 있습니다.
#include <string> enum Errors { ErrorA = 0, ErrorB, ErrorC }; std::ostream& operator<<(std::ostream& out, const Errors value) { return out << [value]() { switch (value) { case ErrorA: return "ErrorA"; case ErrorB: return "ErrorB"; case ErrorC: return "ErrorC"; } }; }
위 내용은 if/switch 문을 사용하지 않고 C 열거형 값을 텍스트로 인쇄하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!