std::function 可以存储指向数据成员的指针吗?
Can a std::function store pointers to data members?
从cppreference,我发现:
Class template std::function is a general-purpose polymorphic function wrapper. Instances of std::function can store, copy, and invoke any Callable target -- functions, lambda expressions, bind expressions, or other function objects, as well as pointers to member functions and pointers to data members.
我不明白为什么 std::function
应该能够存储这样的指针,而且我以前从未听说过该功能。
真的有可能吗,我漏掉了什么,或者那是文档中的错误?
在这种情况下 operator()
应该如何表现?
从 documentation:
Invokes the stored callable function target with the parameters args.
无论如何,这里没有可调用的存储可调用函数目标。我错了吗?
老实说,我什至不知道这样一个函数的正确语法是什么,否则我会写一个例子来测试它。
如何使用以下模板来定义指向数据成员的指针?
template< class R, class... Args >
class function<R(Args...)>
调用std::function<R(ArgTypes...)>
的函数调用运算符的效果:
R operator()(ArgTypes... args) const
等同于 (§ 20.9.11.2.4 [func.wrap.func.inv]/p1):
INVOKE<R>(f, std::forward<ArgTypes>(args)...)
其定义包括以下项目符号 (§ 20.9.2 [func.require]/p1):
Define INVOKE(f, t1, t2, ..., tN) as follows:
[...]
1.3 — t1.*f
when N == 1
and f
is a pointer to member data of a class T
and t1
is an object of type T
or a
reference to an object of type T
or a reference to an object of a type derived from 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));
从cppreference,我发现:
Class template std::function is a general-purpose polymorphic function wrapper. Instances of std::function can store, copy, and invoke any Callable target -- functions, lambda expressions, bind expressions, or other function objects, as well as pointers to member functions and pointers to data members.
我不明白为什么 std::function
应该能够存储这样的指针,而且我以前从未听说过该功能。
真的有可能吗,我漏掉了什么,或者那是文档中的错误?
在这种情况下 operator()
应该如何表现?
从 documentation:
Invokes the stored callable function target with the parameters args.
无论如何,这里没有可调用的存储可调用函数目标。我错了吗?
老实说,我什至不知道这样一个函数的正确语法是什么,否则我会写一个例子来测试它。
如何使用以下模板来定义指向数据成员的指针?
template< class R, class... Args >
class function<R(Args...)>
调用std::function<R(ArgTypes...)>
的函数调用运算符的效果:
R operator()(ArgTypes... args) const
等同于 (§ 20.9.11.2.4 [func.wrap.func.inv]/p1):
INVOKE<R>(f, std::forward<ArgTypes>(args)...)
其定义包括以下项目符号 (§ 20.9.2 [func.require]/p1):
Define INVOKE(f, t1, t2, ..., tN) as follows:
[...]
1.3 —
t1.*f
whenN == 1
andf
is a pointer to member data of a classT
andt1
is an object of typeT
or a reference to an object of typeT
or a reference to an object of a type derived fromT
;
然后,当 f
是指向存储在 std::function
的内部调用程序中的数据成员的指针时,std::function
本身应该定义一个参数,例如:
std::function<int(std::pair<int,int>)> f = &std::pair<int,int>::first;
f(std::make_pair(1, 2));