可能かどうかわからないので、これはかなり長い目で見たものですが、テンプレートのメタプログラミングで私よりも経験豊富な人が教えてくれるかもしれません。
テンプレートを使用して自動化された lua 関数バインディング システムを作成し、部分的な特殊化を使用して関数型を抽出しています。
template<typename T, T FUNCTION> class Function_c;
template<typename R, R (*FUNCTION)()> class Function_c<R (*)(), FUNCTION>; //specialized version
問題は、これは関数呼び出し規則を教えてくれないので、(VS2012 32 ビットでは) __stdcall 用にコンパイルされず、__fastcall でクラッシュすることです。特定の呼び出し規約に対処するために、別の特殊なバージョンを作成できます。たとえば、次のようになります。
template<typename R, R (__stdcall *FUNCTION)()> class Function_c<R (__stdcall *)(), FUNCTION>;
しかし、順列の数は手に負えなくなり始めています: 2 (グローバル関数とメンバー関数) x パラメータの最大数 x 呼び出し規約の数。
したがって、コピーペーストの量を削減するために、呼び出し規約をテンプレートパラメーターとして取得する方法があるかどうか疑問に思っています(実際には型ではないため、おそらくそうではありません)。