解析エラー報告用の C テンプレートの型名を取得する方法
テキスト データ ファイルの解析中にエラーが発生した場合は、次の情報を提供することが重要です問題とエラーが発生したデータ ファイルの場所を示す、プログラマ以外のユーザー向けの情報メッセージ。ファイル、セクション、キー名の抽出は簡単ですが、テンプレート関数が解析するデータ型を取得することはすぐにはわかりません。
このニーズに対処するには、次の 2 つのアプローチが検討できます。
typeid による実行時型の識別
catch(...)throw ParseError(file,section,key,it->next,typeid(T).name( ));<br>
このアプローチでは、typeid 演算子を利用して実行時に型名を取得します。ただし、例外がスローされると実行時のオーバーヘッドが発生する可能性があり、頻繁に実行されるコードにとっては望ましくないことです。
コンパイル時の型名マクロ
代替アプローチ別のヘッダー ファイルで型名マクロを定義する必要があります:
#pragma once template<typename T> const wchar_t *GetTypeName(); #define DEFINE_TYPE_NAME(type, name) \ template<>const wchar_t *GetTypeName<type>(){return name;}
これらのマクロを使用して、それぞれのヘッダー ファイルで必要なすべての型の型名を指定できます。リンカーは、定義された型に基づいて適切なテンプレートの特殊化を自動的に解決するか、必要な型が欠落している場合はエラーをスローします。
このコンパイル時のアプローチにより、実行時のオーバーヘッドが排除され、必要な型名がすべて定義されることが保証されます。コンパイル時に。また、将来的に新しいタイプを簡単に追加することもできます。
以上が解析エラー報告用に C テンプレートの型名を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。