エラー時にユーザーに表示される一意のエラー コードを使用すると便利です。これにより、開発者はエラーの原因を特定しやすくなり (ソース コードでエラー コードを検索するだけです)、時間を節約できます。
例:
void f()
{
std::cout << "UNIQUE001 " << "Error : The query failed" << std::endl;
}
void g()
{
f();
}
int main()
{
g();
return 0;
}
この例では、ユーザーがエラーを報告しています ("UNIQUE001 エラー: クエリが失敗しました")。開発者は「UNIQUE001」でプロジェクト全体を検索するだけで、エラーがスローされた場所をすぐに見つけることができます。(その間にコードが変更されている可能性があるため、行番号を含むファイルでは十分ではありません)。
それで、質問に対して:コンパイル時(理想的には、プリプロセッサマクロまたはTMPのいずれかを使用)または実行時(ユニットテストなど)にエラーコード文字列の一意性を強制する方法はありますか?
アップデート
これまでの私の最善の試みは、型名とエラー コードに等しい値の文字列を持つ型を作成するマクロを使用して構造体を作成することでした。これは機能し、重複した型のコンパイル時エラーが発生しますが、構造体はどこでも (式などで) 宣言できません。
#define generateerrorcode(code) \
struct code \
{ \
static const char* value = #code \
}; \
可能であれば、次のような一意のチェック機能を使用できるようにしたいと思います。
void some_function()
{
std::cout << check_unique("UNIQUE001") << "Error : The query failed" << std::endl;
}