Может ли std :: function хранить указатели на элементы данных?

От cppreference, Я нашел это:

Шаблон класса std :: function является оберткой полиморфной функции общего назначения. Экземпляры std :: function могут хранить, копировать и вызывать любые целевые функции Callable, лямбда-выражения, выражения связывания или другие объекты функций, а также указатели на функции-члены и указатели на члены данных.

Я не могу понять, почему std::function должен иметь возможность хранить такой указатель, и я никогда не слышал об этой функции.
Это действительно возможно, я что-то пропустил или это ошибка в документации?

Как следует operator() вести себя в таком случае?
Как из документация:

Вызывает сохраненную функцию вызываемой функции с параметрами args.

В любом случае, здесь нет сохраняемой цели вызываемой функции для вызова здесь. Я ошибся?

Честно говоря, я даже не могу понять, какой синтаксис подходит для такой функции, иначе я бы написал пример для проверки.
Как можно использовать следующий шаблон для определения указателя на элемент данных?

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

37

Решение

Эффект от вызова оператора вызова функции std::function<R(ArgTypes...)>:

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

эквивалентно (§ 20.9.11.2.4 [Func.wrap.func.inv] / р1):

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

чье определение включает в себя следующую пулю (§ 20.9.2 [Func.require] / р1):

определять ВЫЗОВ(f, t1, t2, …, tN) следующим образом:

[…]

1,3t1.*f когда N == 1 а также f указатель на данные члена класса T а также t1 является объектом типа T или
ссылка на объект типа T или ссылка на объект типа, производного от T;

тогда, когда f является указателем на член данных, хранящийся во внутреннем активаторе std::functionтогда std::function сам должен определить один аргумент, например:

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

f(std::make_pair(1, 2));

DEMO

24

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector