> 백엔드 개발 > C++ > C `std::type_info::name()` 결과를 어떻게 해독할 수 있나요?

C `std::type_info::name()` 결과를 어떻게 해독할 수 있나요?

Patricia Arquette
풀어 주다: 2024-12-29 19:51:11
원래의
845명이 탐색했습니다.

How Can I Demangle C   `std::type_info::name()` Results?

std::type_info::name 결과 디맹글링

C의 type_info 클래스는 유형의 이름을 검색하는 메서드를 제공합니다. , 그러나 반환된 이름은 종종 손상됩니다. 이로 인해 이름에서 유용한 정보를 추출하기가 어렵습니다. 이 문제를 해결하기 위해 디맹글링이라는 기술을 활용할 수 있습니다.

디맹글링 프로세스

디맹글링에는 맹글링된 이름을 사람이 읽을 수 있는 원래 형식으로 다시 변환하는 작업이 포함됩니다. 이 프로세스는 C 런타임 환경에서 제공하는 abi::__cxa_demangle() 함수를 사용하여 수행할 수 있습니다. 하지만 이 기능은 GCC 등 특정 컴파일러에서만 사용할 수 있습니다.

GCC 구현

GCC의 경우 디맹글링 프로세스는 다음과 같이 구현할 수 있습니다. 아래:

#include <typeinfo>
#include <cxxabi.h>

std::string demangle(const char* mangled_name) {
    int status = -4;
    char* demangled_name = abi::__cxa_demangle(mangled_name, NULL, NULL, &status);
    if (status == 0) {
        std::string result(demangled_name);
        free(demangled_name);
        return result;
    }
    return mangled_name;
}
로그인 후 복사

사용법

Demangling 기능을 사용하면 다음과 같이 유형의 demangled 이름을 검색할 수 있습니다.

std::string demangled_name = demangle(typeid(int).name());
로그인 후 복사

비 GCC 컴파일러

GCC를 사용하지 않는 경우 유형 이름 해체를 위한 대체 라이브러리나 기술을 찾아야 할 수도 있습니다.

로깅의 자동 유형 해체

위에 설명된 기술을 로깅 시스템에 통합하여 자동으로 유형 이름을 분리할 수 있으므로 호출 컨텍스트. 이는 디버깅 목적에 특히 유용할 수 있습니다.

추가 고려 사항

특히 복잡하거나 중첩된 유형의 경우 분해가 항상 가능하거나 실용적인 것은 아닙니다. 이러한 경우 type_info 개체에서 의미 있는 정보를 추출하기 위해 다른 접근 방식을 사용해야 할 수도 있습니다.

위 내용은 C `std::type_info::name()` 결과를 어떻게 해독할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿