据我了解,std::invoke允许我做类似的事情:
std::invoke(f, arg1, arg2, ...);
Run Code Online (Sandbox Code Playgroud)
是否存在比简单操作更有利的情况:
f(arg1, arg2, ...);
Run Code Online (Sandbox Code Playgroud)
Sto*_*ica 21
如果invocable是指向成员函数的指针,那么您需要执行以下操作之一:
(arg1->*f)(arg2,...);
(arg1.*f)(arg2,...);
Run Code Online (Sandbox Code Playgroud)
取决于是什么arg1.
INVOKE(和它的官方库对应物std::invoke)几乎旨在简化这些混乱.
您将使用std::invoke支持传递任何可调用代码的代码的调用者,而不必使用lambda或调用来调整其调用站点std::bind.
std::invoke当您创建lambda并需要立即调用它时,它很有用。如果lambda大,后面很难加上括号:
[] (/* args */) {
// many lines here
// ...
} (/* args */)
Run Code Online (Sandbox Code Playgroud)
与
std::invoke(
[] (/* args */) {
// many lines here
// ...
},
/* args */);
Run Code Online (Sandbox Code Playgroud)