小编ass*_*sem的帖子

组合模板参数形成函数签名时无效的 void 参数

尝试获取两个回调的签名并生成使用它们每个返回值的回调签名。

\n\n

给定回调AB=> 生成F

\n\n

例 1) A: int(char)B: double(bool)=> F: double(int)

\n\n

例 2) A: void(char)B: void(int)=> F: void(void)

\n\n

void使用参数实例化回调时遇到奇怪的编译器错误:

\n\n

error: invalid parameter type \xe2\x80\x98void\xe2\x80\x99

\n\n

有问题的代码

\n\n
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)

c++ templates c++11

4
推荐指数
1
解决办法
1649
查看次数

标签 统计

c++ ×1

c++11 ×1

templates ×1