3

我看到了这个模板声明:

template<typename C, typename R, typename P1, typename P2> struct mystruct<R(C::*)(P1,P2)> { ... };

我知道 C::* 表示“指向 C 成员的指针”,但我不明白 R(C::*)(P1,P2) 的作用

4

3 回答 3

8
R(C::*)(P1,P2)

指向类 C 的成员函数的指针,采用 P1 和 P2 类型的参数,返回 R。

该行作为一个整体是一个类模板特化(必须至少存在一个用于mystruct某处的主模板的声明)。

于 2013-02-20T11:15:02.033 回答
7

这意味着传递给模板参数的类型mystruct是指向C具有返回类型的成员函数的指针,该成员函数接受类型和R两个参数。P1P2

于 2013-02-20T11:19:39.920 回答
5

R(C::*)(P1,P2)表示指向函数的指针,该函数是 C 返回 R 的成员,并将 P1 和 P2 作为参数。

于 2013-02-20T11:14:49.327 回答