そのため、C++ の新しい可変個引数テンプレートに頭を悩ませようとしていますが、それを使用してコードを単純化できるかどうか疑問に思っています。私はこのようなものを持っています:
template<typename FinalPatch,typename ReturnType, typename P1>
class Patch1: public PatchBase
{
public:
typedef Patch1<FinalPatch,ReturnType,P1> patch_type;
typedef ReturnType(WINAPI* FuncType)( P1 );
typedef std::function<ReturnType(P1)> function_type;
static ReturnType __stdcall exec( P1 p1 )
{
return _function(p1);
}
};
template<typename FinalPatch,typename ReturnType, typename P1, typename P2>
class Patch2: public PatchBase
{
public:
typedef Patch2<FinalPatch,ReturnType,P1,P2> patch_type;
typedef ReturnType(WINAPI* FuncType)( P1, P2 );
typedef std::function<ReturnType(P1,P2)> function_type;
static ReturnType __stdcall exec( P1 p1, P2 p2 )
{
return _function(p1, p2);
}
};
そして、約10個のP...パラメータまで。
静的メソッドは、exec
WINAPI 関数を置き換えてstd::function
デリゲートにプロキシする Detours のようなシステムで使用されます。
FuncType
「通常の」関数ポインタを表します。
可変個引数テンプレートを使用して、これを単一のクラスに減らすことは可能ですか? もしそうなら、どのように?