我看到了这个模板声明:
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
某处的主模板的声明)。
这意味着传递给模板参数的类型mystruct
是指向C
具有返回类型的成员函数的指针,该成员函数接受类型和R
两个参数。P1
P2
R(C::*)(P1,P2)
表示指向函数的指针,该函数是 C 返回 R 的成员,并将 P1 和 P2 作为参数。