AnA*_*ons 9 c++ variadic-functions language-lawyer
换句话说,当函数声明为这样时,'T'是一些类型别名:
T (...)
Run Code Online (Sandbox Code Playgroud)
会有用吗?
如果您不知道此类声明指定了具有未知数量参数的函数.这是C++标准允许的,但它没有为我们提供访问传递参数的标准方法.有<cstdarg>库但它需要省略号之前的命名参数才能工作.它看起来像这样(使用另一个名为'T1'的类型别名):
T (T1, ...)
Run Code Online (Sandbox Code Playgroud)
通常T1是类型int并且分配可变参数的数量.
然而省略号可能是唯一的函数参数的事实意味着这样的构造有一些目的,我很好奇它是什么?
这种函数的实际示例如下所示:
void func(...)
{
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 11
一个例子是元编程技巧,以利用...始终是可行的过载但是最不优选的事实.例如,此类型特征检查特定成员(foo)是否存在:
template <typename T>
struct has_foo {
template <typename U>
static std::true_type test( decltype(U::foo)* );
template <typename U>
static std::false_type test( ... );
using type = decltype(test<T>(0));
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |