punteros puntero parametros funciones estructura declarar declaracion datos como cadenas aritmetica apuntadores c++ c++11 stl std-function data-members

c++ - parametros - ¿Puede una función std:: almacenar punteros a los miembros de datos?



punteros c++ (1)

El efecto de una llamada al operador de llamada a función de std::function<R(ArgTypes...)> :

R operator()(ArgTypes... args) const

es equivalente a (§ 20.9.11.2.4 [func.wrap.func.inv]/p1 ):

INVOKE(f, std::forward<ArgTypes>(args)..., R)

cuya definición incluye la siguiente viñeta (§ 20.9.2 [func.require]/p1 ):

Defina INVOKE (f, t1, t2, ..., tN) de la siguiente manera:

[...]

1.3 - t1.*f cuando N == 1 y f es un puntero a los datos de miembros 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 ;

entonces, cuando f es un puntero a un miembro de datos almacenado en un invocador interno de una std::function , entonces la std::function misma debería definir un único argumento, por ejemplo:

std::function<int(std::pair<int,int>)> f = &std::pair<int,int>::first; f(std::make_pair(1, 2));

DEMO

De cppreference , encontré que:

La plantilla de clase std :: function es una envoltura de función polimórfica de propósito general. Las instancias de std :: function pueden almacenar, copiar e invocar cualquier destino invocable: funciones, expresiones lambda, expresiones de enlace u otros objetos de funciones, así como punteros a funciones de miembros y punteros a miembros de datos .

No puedo ver por qué una std::function debería ser capaz de almacenar un puntero así y nunca antes había escuchado sobre esa función.
¿Es realmente posible, me perdí algo o es un error en la documentación?

¿Cómo debe comportarse el operator() en tal caso?
A partir de la documentation :

Invoca el objetivo de función invocable almacenado con los parámetros args.

De todos modos, no hay un objetivo almacenable de función invocable para invocar aquí. ¿Me equivoco?

Para ser sincero, ni siquiera puedo descifrar cuál es la sintaxis correcta para esa función, de lo contrario, habría escrito un ejemplo para probarlo.
¿Cómo podría usarse la siguiente plantilla para definir un puntero al miembro de datos?

template< class R, class... Args > class function<R(Args...)>