私のコードがこの構造を何度も繰り返していることに気付きました:
if( someErrorHappened ){
string errorMsg = "Falcon Punch!";
::GetErrorLoggerInstance()->Log( LOG_TYPE_ERROR, "class", "method", errorMsg );
throw SomeCustomException( errorMsg );
}
テンプレート関数を記述して、これらすべてを次のようなワンライナーに置き換えることができると考えました。
LogAndThrowIfError<SomeCustomException>( someErrorHappened, "class", "method", "Falcon Punch!" );
基本的なテンプレートの知識があれば、問題なく実行できます。私の質問は、テンプレート引数が特定のクラスから継承されていないクラスである場合、Boost を使用してコンパイル エラーが発生するようにすることはできますか? (つまり、この関数をカスタム例外にのみ使用したい)。C# のwhere
ジェネリックのキーワードのようなものです。
これは大げさに思えるかもしれませんが、アプリケーションにはマネージド コードとアンマネージド コードがあり、カスタム ネイティブ例外はカスタム マネージド例外にマップされているため、これを強制する必要があります。そのため、これは例外でのみ使用する必要があります。
私は Visual Studio 2010 で作業しているので、派手な C++11 のすべてを持っているわけではありません。