プロジェクトにFormatMessage()を使用する必要がありますが、その恐ろしいインターフェイスが好きではありません。置換パラメーターを許可しながら、それを整理するファサードを知っている人はいますか?
私は FastFormat の紹介 の 2 番目の部分を読み、 FormatMessage()の拡張機能を作成することを検討しています(または、FastFormatプロジェクト チームに拡張機能があるかどうかを尋ねます)。他にまともなものがあれば、代わりにそれをつかむでしょう。
私が欲しいのは、次のようなコードを記述できるようにすることです。
HINSTANCE netevent = ::LoadLibrary("netevent.dll");
std::string msg = LookupError(netevent, EVENT_SERVICE_START_FAILED_II,
"child-svr", "parent-svr", "ship happens");
::puts(msg.c_str());
結果は次のようになります。
The child-svr service depends on the parent-svr service which failed to start be cause of the following error:
ship happens
私が構築した現在のラッパーには、次のインターフェースがあります。
std::string LookupError(HINSTANCE hinst, DWORD id, ...);
これには 2 つの問題があります。
int
,std::string
,void*
- ではない任意の型を簡単に渡すことができるため、型安全ではありません。const char*
- 引数の数と、エラーを表すフォーマット文字列に必要な数が一致しないのは簡単です。
型安全性の観点からFastFormatの機能を考えると、そのメカニズムに従ってFormatMessage()を処理する方法があるかどうかを知りたいです。