`struct decay<T, R(A..., ...)>` 是什么意思
What's the meaning of `struct decay<T, R(A..., ...)>`
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..., ...); };
这部分是 std::decay
在 boost::hana
中的优化版本的实现。 typename T
和 T
部分是转移注意力的部分,是该优化的一部分。
它是匹配 R(A..., ...)
的特化,其中 A...
和 R
是从函数签名推导出来的。
如果您将 double(int, char, ...)
作为此 hana::details::decay
的第二个参数传递,R
将是 double
而 A...
将是 int, char
. ...
会 "match the C-style varags".
此特定专业化的目的是将以 C 样式可变参数结尾的函数签名映射到指向相同签名的指针。所以它将 double(int, char, ...)
映射到 double(*)(int, char, ...)
.
C 风格可变参数与模板可变参数不同。他们早于它。
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..., ...); };
这部分是 std::decay
在 boost::hana
中的优化版本的实现。 typename T
和 T
部分是转移注意力的部分,是该优化的一部分。
它是匹配 R(A..., ...)
的特化,其中 A...
和 R
是从函数签名推导出来的。
如果您将 double(int, char, ...)
作为此 hana::details::decay
的第二个参数传递,R
将是 double
而 A...
将是 int, char
. ...
会 "match the C-style varags".
此特定专业化的目的是将以 C 样式可变参数结尾的函数签名映射到指向相同签名的指针。所以它将 double(int, char, ...)
映射到 double(*)(int, char, ...)
.
C 风格可变参数与模板可变参数不同。他们早于它。