作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
它的确切含义是什么?我需要一些帮助~
最佳答案
int foo(int);
int bar(int, ...);
这是两个不同的功能。 foo
是 int(int)
类型。 bar
的类型为 int(int,...)
。
...
是 C 风格的可变参数,不要与同样使用 ...
的可变模板参数混淆。
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
这部分是 boost::hana
中 std::decay
优化版本的实现。 typename T
和 T
部分是红色鲱鱼,是该优化的一部分。
它是匹配R(A..., ...)
的特化,其中A...
和R
是从函数签名推导出来。
如果您将 double(int, char, ...)
作为此 hana::details::decay
的第二个参数传递,R
将是 double
而 A...
将是 int, char
。而 ...
将“匹配 C 风格的可变参数”。
这个特殊化的目的是将以 C 风格可变参数结尾的函数签名映射到指向相同签名的指针。所以它将 double(int, char, ...)
映射到 double(*)(int, char, ...)
。
C 风格的可变参数与模板可变参数不同。他们早于它。
关于c++ - `struct decay<T, R(A..., ...)>`是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047347/
我是一名优秀的程序员,十分优秀!