尝试获取两个回调的签名并生成使用它们每个返回值的回调签名。
\n\n给定回调A并B=> 生成F
例 1) A: int(char)B: double(bool)=> F: double(int)
例 2) A: void(char)B: void(int)=> F: void(void)
void使用参数实例化回调时遇到奇怪的编译器错误:
error: invalid parameter type \xe2\x80\x98void\xe2\x80\x99
template<class Signature>\nstruct my_func;\n\ntemplate<class Ret, class... Args>\nstruct my_func<Ret(Args...)>\n{};\n\ntemplate<class FuncA, class FuncB>\nstruct my_fwd;\n\ntemplate<class ORet, class... OArgs,\n class Ret, class... Args>\nstruct my_fwd<\n my_func<ORet(OArgs...)>,\n my_func<Ret(Args...)>\n >\n{\n my_func< ORet(Ret) > func; // <--- error\n};\n\nint main(int, char *[])\n{\n my_func<void(int)> my3; // (1)\n my_func<void(void)> my4; // …Run Code Online (Sandbox Code Playgroud)