需要注意的是并没有Invoke的方法, 这个主要是因为不同用途(如纯C++的调用, 和for lua的Invoke, 类型擦除后的调用方式会略有差异). c++的调用(依托Args和Value来完成调用参数和返回值类型的统一..., std::get()), 通过Uses结构体的特殊构造和tuple的辅助函数, 可以借助不同的enum值来完成不同用途和不同类型的FunctionCaller的生成和存储....);
}
};
perFunction的作用主要是完成对不同函数(参数与返回值可能都不一样)的类型擦除, 形成统一类型的FunctionCaller....ConvertArgs和ChooseCallReturner一个是将从args中取到的Value置换为具体类型的参数, 一个是将具体类型的返回值置换为Value, 通过这种方式, 最终实现了函数的调用参数和返回值的统一...上面我们有提到ConvertArgs和ChooseCallReturner, 通过这两者我们很好的实现了调用函数的参数统一以及返回值统一, 这里我们也对其实现做一下具体的拆解, 当然, 主要的类型转换的实现其实更多的是依赖