#include <tuple>
//元组
std::make_tuple()
//可放不同类型且不需要指定类型,生成一个std::tuple<Args...>
std::tuple<Args...>
//需要指定类型如std::tuple<int,double>(1,0.1);
std::tuple_cat()
//输入多个std::tuple拼接成一个std::tuple
std::apply(para_1, std::tuple(para_2, para_3))
//para_1:函数 (普通函数:函数名,静态成员函数XXX::XXX,成员函数&XXX::XXX)
//para_2:成员函数时为类对象。否者和para_3都是参数列表
//std::apply第二个参数是std::tuple
std::bind(para_1,std::placeholders::_1);
//para_1同上是函数名或地址
//返回值是一个仿函数。
//std::placeholders::_1参数顺序的占位符
//参数个数好像是写死的,我是用匿名函数代替。
Args&& ... args//可变参数模板
std::forward<Args...>(args...)//完美转发可变参数
//函数指针通用写法,还可以加入const在末尾表示const函数
template<typename Class, typename...Args>
void (Class::*func)(Args...)
template<typename Class, typename Return, typename...Args>
Return(Class::*func)(Args...)
结合std::function,void*就能做出插件框架