¿Por qué las instalaciones de INVOKE en el estándar de C ++ 11 se refieren a miembros de datos?
$ 20.8.2 de la norma describe la facilidad de INVOKE que se usa principalmente para describir cómo se llaman los callables con las listas de argumentos variables en toda la biblioteca estándar:
Defina FACTURA (f, t1, t2, ..., tN) de la siguiente manera:
— (t1.*f)(t2, ..., tN)
cuando f es un puntero a una función miembro de una clase T y t1 es un objeto de tipo T o una referencia a un objeto de tipo T o una referencia a un objeto de un tipo derivado de T;
— ((*t1).*f)(t2, ..., tN)
cuando f es un puntero a una función miembro de una clase T y t1 no es uno de los tipos descritos en el elemento anterior;
— t1.*f
cuando N == 1 y f es un puntero a los datos del miembro de una clase T y t1 es un objeto de tipo T o una referencia a un objeto de tipo T o una referencia a un objeto de un tipo derivado de T;
— (*t1).*f
cuando N == 1 y f es un puntero a los datos de miembros de una clase T y t1 no es uno de los tipos descritos en el elemento anterior;
— f(t1, t2, ..., tN)
en todos los otros casos.
¿Para qué son el tercer y el cuarto ítem? Por lo que puedo decir, no llamanf
incluso sif
es llamable ¿Cuál es el caso del usuario para ellos? Tal vez sea un error tipográfico en el estándar y*f()
¿se pretendía?