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风格的varargs,不要与使用的变量模板参数混淆….
template <typename T,...); };
这部分是在boost :: hana中实现std :: decay的优化版本. typename T和T部分是红色鲱鱼,是优化的一部分.
它是一个匹配R(A …,…)的特化,其中A …和R是从函数签名中推导出来的.
如果你传递double(int,char,…)作为这个hana :: details :: decay的第二个参数,R将是double,A …将是int,char.并且…将“匹配C风格的varags”.
这种特殊的专业化的目的是将以C风格的变量结尾的函数签名映射到指向相同签名的指针.所以它将double(int,…)映射到double(*)(int,…).
C style varargs与模板variardic参数不同.他们早于它.