std::apply,std::invoke
std:apply定义在<tuple>中,因而apply(f,t)的意思就是f(t),其中f是一个可调用的函数,t是一个tuple,pair,array之类的可以调用std::get和std::tuple_size的参数集合类。
#include <iostream>
#include <tuple>
#include <utility>
int add(int first, int second) { return first + second; }
int main()
{
auto add_lambda = [](auto first, auto second) { return first + second; };
std::cout << std::apply(add, std::make_pair(1, 2)) << '\n';
std::cout << std::apply(add_lambda, std::make_pair(2.0f, 3.0f)) << '\n';
}
std::invoke定义在<functional>中,它比较复杂,以一种合适的方式调用invoke参数中的函数,该函数的参数来自于invoke的其他参数。
#include <functional>
#include <iostream>
struct Foo {
Foo(int num) : num_(