ホームページ > バックエンド開発 > C++ > C の `std::type_info::name()` の結果をデマングルするにはどうすればよいですか?

C の `std::type_info::name()` の結果をデマングルするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-29 19:51:11
オリジナル
832 人が閲覧しました

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;
}
ログイン後にコピー

使用法

デマングリング関数を使用すると、次のように型のデマングルされた名前を取得できます。

std::string demangled_name = demangle(typeid(int).name());
ログイン後にコピー

非 GCCコンパイラー

GCC を使用していない場合は、型名をデマングリングするための代替ライブラリまたは手法を見つける必要がある場合があります。

ロギングでの自動型デマングリング

上記の手法をロギング システムに統合して、型名を自動的に解読し、型名を理解しやすくすることができます。コンテキストを呼び出します。これは、デバッグ目的で特に役立ちます。

追加の考慮事項

デマングリングは、特に複雑な型やネストされた型の場合、常に可能または現実的であるとは限らないことに注意してください。このような場合、他のアプローチを使用して、type_info オブジェクトから意味のある情報を抽出する必要がある場合があります。

以上がC の `std::type_info::name()` の結果をデマングルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート