このテンプレート宣言を見ました:
template<typename C, typename R, typename P1, typename P2> struct mystruct<R(C::*)(P1,P2)> { ... };
C::* が「C のメンバーへのポインター」を意味することは知っていますが、R(C::*)(P1,P2) が何をするのか理解できません。
R(C::*)(P1,P2)
クラスCのメンバー関数へのポインター。タイプP1およびP2のパラメーターを取り、Rを返します。
この行は全体として、クラステンプレートの特殊化です(少なくともmystruct
どこかにプライマリテンプレートの宣言が存在する必要があります)。
これは、 のテンプレート パラメーターに渡される型が、と の2 つのパラメーターを受け取る戻り値の型を持つのmystruct
メンバー関数へのポインターであることを意味します。C
R
P1
P2
R(C::*)(P1,P2)
Cのメンバーである関数へのポインタがRを返し、P1とP2を引数として取るという意味です。