ホームページ > バックエンド開発 > C++ > 有益なエラー メッセージを得るために C テンプレートの型名を取得する方法

有益なエラー メッセージを得るために C テンプレートの型名を取得する方法

DDD
リリース: 2024-11-16 15:18:03
オリジナル
805 人が閲覧しました

How to Retrieve Type Names in C   Templates for Informative Error Messages?

C テンプレートの型名を取得

データを解析するためのテンプレート クラスを開発する場合、解析が失敗した場合に有益なエラー メッセージを生成する必要が生じる場合があります。包括的なエラー メッセージを提供するには、テンプレート関数が変換しようとしている型の名前を知る必要がある場合があります。

以下のコード スニペットは、特殊化を使用して型名を取得しようとする元のコードを示しています。文字列の場合:

template<typename T> T GetValue(const std::wstring &amp;section, const std::wstring &amp;key)
{
    std::map<std::wstring, std::wstring>::iterator it = map[section].find(key);
    if(it == map[section].end())
        throw ItemDoesNotExist(file, section, key)
    else
    {
        try{return boost::lexical_cast<T>(it->second);}
        //needs to get the name from T somehow
        catch(...)throw ParseError(file, section, key, it->second, TypeName(T));
    }
}
ログイン後にコピー

別の解決策には、次の使用が含まれます:

typeid(T).name()
ログイン後にコピー

typeid(T) 関数は、マングルされた型名へのアクセスを提供する std::type_info のインスタンスを返します。 std::type_info の name() メソッドは、デマングルされた型名を返します。

このソリューションをコードに統合すると、catch ブロックを次のように変更できます。

catch(...)throw ParseError(file, section, key, it->second, typeid(T).name());
ログイン後にコピー

このアプローチにより、明示的な特殊化を必要とせずに、型名を取得するためのより柔軟かつ効率的な方法が提供されます。

以上が有益なエラー メッセージを得るために C テンプレートの型名を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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