Joh*_*ith 6 c++ templates metaprogramming
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
Run Code Online (Sandbox Code Playgroud)
这究竟是什么意思?我需要一些帮助〜
int foo(int);
int bar(int, ...);
Run Code Online (Sandbox Code Playgroud)
这是两个不同的功能. foo是类型的int(int). bar是类型的int(int,...).
...是C风格的变种,不要与也使用的变异模板参数混淆....
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
Run Code Online (Sandbox Code Playgroud)
这部分std::decay内部优化版的实现boost::hana.在typename T与T部分是红鲱鱼,最优化的一部分.
它是一种特殊化,可以匹配R(A..., ...),在哪里A...,R从函数签名中推导出来.
如果你double(int, char, ...)作为第二个参数传递给它hana::details::decay,那R将是double和A...将来int, char.并且" ...将匹配C风格的varags".
这种特殊的专业化的目的是将以C风格的变量结尾的函数签名映射到指向相同签名的指针.所以它映射double(int, char, ...)到double(*)(int, char, ...).
C style varargs与模板variardic参数不同.他们早于它.
这种特化是将函数类型衰减到相应的指向函数类型的特化之一,它反映了函数左值衰减到函数指针prvalues的方式.
这个特殊的特化用于变量参数函数(那些参数列表以省略号结尾,以便它接受与任何参数不匹配的参数).
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |