标准的 $ 20.8.2 描述了 INVOKE 工具,该工具主要用于描述如何在整个标准库中使用可变参数列表调用可调用对象:
定义 INVOKE (f, t1, t2, ..., tN) 如下:
—
(t1.*f)(t2, ..., tN)
当 f 是指向类 T 的成员函数的指针并且 t1 是类型 T 的对象或对类型 T 的对象的引用或对从 T 派生的类型的对象的引用时;—
((*t1).*f)(t2, ..., tN)
当 f 是指向类 T 的成员函数的指针且 t1 不是上一项中描述的类型之一时;—
t1.*f
当 N == 1 并且 f 是指向类 T 的成员数据的指针并且 t1 是类型 T 的对象或对类型 T 的对象的引用或对从 T 派生的类型的对象的引用时;—
(*t1).*f
当 N == 1 并且 f 是指向类 T 的成员数据的指针并且 t1 不是上一项中描述的类型之一时;—
f(t1, t2, ..., tN)
在所有其他情况下。
第三项和第四项是干什么用的?f
据我所知,即使是可调用的,他们也不会f
调用。他们的用户案例是什么。也许这是标准中的错字并且*f()
是有意的?