template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
这是什么意思?我需要一些帮助〜struct decay <T,R(A ...,...)>是什么意思
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
这是什么意思?我需要一些帮助〜struct decay <T,R(A ...,...)>是什么意思
int foo(int);
int bar(int, ...);
这些是两个不同的功能。 foo
类型为int(int)
。 bar
类型为int(int,...)
。
...
是C风格的可变参数,不要与也使用...
的variardic模板参数混淆。
template <typename T, typename R, typename ...A>
struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
的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样式可变参数与模板variardic参数不一样。他们早于它。
非常感谢。这就是我想知道的。 –
你从哪里看到该代码?它看起来类似于某人合理用于实现'std :: decay'的内容,但没有理由使用'T' ......我的第一个假设是你错误地复制了它。 – Yakk
@Yakk:这段代码来自boost :: hana。 –
Aha:http://www.boost.org/doc/libs/1_62_0/libs/hana/doc/html/structboost_1_1hana_1_1detail_1_1decay.html这是一个优化。这解释了否则无意义的设计;他们正在解决模板实例化的低效问题。 – Yakk