このテンプレート宣言を見ました:
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メンバー関数へのポインターであることを意味します。CRP1P2
R(C::*)(P1,P2)Cのメンバーである関数へのポインタがRを返し、P1とP2を引数として取るという意味です。