只有未指定数量的参数的函数的目的是什么?
What's the purpose of function with only unspecified number of parameters?
换句话说,当函数像这样声明时 'T' 是某种类型别名:
T (...)
会有用吗?
如果您不知道这样的声明指定了一个参数数量未知的函数。 C++ 标准允许它,但它没有为我们提供访问传递参数的标准方法。有 <cstdarg>
库,但它需要省略号前的命名参数才能工作。它看起来像这样(另一个类型别名名为 'T1'):
T (T1, ...)
通常 T1
是 int
类型并指定可变参数的数量。
然而,省略号可以是唯一的函数参数这一事实意味着这种构造有一些目的,我很好奇它是什么?
此类函数的实际示例如下所示:
void func(...)
{
}
一个例子是元编程技巧,它利用了 ...
总是可行的重载但最不受欢迎这一事实。例如,此类型特征检查特定成员 (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));
};
换句话说,当函数像这样声明时 'T' 是某种类型别名:
T (...)
会有用吗?
如果您不知道这样的声明指定了一个参数数量未知的函数。 C++ 标准允许它,但它没有为我们提供访问传递参数的标准方法。有 <cstdarg>
库,但它需要省略号前的命名参数才能工作。它看起来像这样(另一个类型别名名为 'T1'):
T (T1, ...)
通常 T1
是 int
类型并指定可变参数的数量。
然而,省略号可以是唯一的函数参数这一事实意味着这种构造有一些目的,我很好奇它是什么?
此类函数的实际示例如下所示:
void func(...)
{
}
一个例子是元编程技巧,它利用了 ...
总是可行的重载但最不受欢迎这一事实。例如,此类型特征检查特定成员 (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));
};