いくつかのプラットフォームでいくつかの基本的なプリミティブを実装するクロスプラットフォーム ライブラリを作成しています。プリミティブ (つまり、クラス) のすべての実装がすべてのプラットフォームで必要なコア メンバーを提供することを確認するには、次の構成を使用します。
template<typename _Ty> int _MethodVerifyHelper(_Ty);
#define ENSURE_MEMBER_DECL(className, methodName, returnType, ...) typedef char __PROTOTYPE_VERIFIER__[sizeof(_MethodVerifyHelper<returnType (className::*)(__VA_ARGS__)>(&className::methodName))]
次に、次のように書きます。
ENSURE_MEMBER_DECL(Event, TryWait, bool, unsigned);
したがって、Event クラスにbool TryWait(unsigned)
メソッドがない場合、ここでコンパイル エラーが発生します。
問題は、コンストラクターへのポインターを宣言するための同様の構文が C++ にあるかどうかです。クラスが指定された引数の型を持つコンストラクターを提供しない場合にコンパイル時エラーを引き起こすステートメントが必要です。