Tro*_*yvs 2 c++ invoke apply c++17
只要 c++ 是面向对象的编程语言,我不确定是否std::apply有std::invoke必要的实用程序,它会转换:
Object.Function(Args...)
Run Code Online (Sandbox Code Playgroud)
进入:
std::invoke(Object, Function, Args)
Run Code Online (Sandbox Code Playgroud)
看起来像 C 风格的函数调用。所以我的问题是,这种场景什么时候对于日常编程来说是必要的/方便的?或者,是否存在使用apply/invoke使事情变得更简单的情况?
您能帮忙举一个很好的例子吗?多谢!
std::invoke使所有Callable对象能够被统一调用,其中包含无法用常规函数调用形式调用的成员函数指针和成员变量指针f(args...)
struct S {
void f(int i);
int x;
};
int main() {
auto mem_vptr = &S::x;
auto mem_fptr = &S::f;
S s;
std::invoke(mem_vptr, s); // invoke like s.*mem_vptr;
std::invoke(mem_fptr, s, 0); // invoke like (s.*mem_fptr)(0);
}
Run Code Online (Sandbox Code Playgroud)