只有未指定数量的参数,功能的目的是什么?

时间:2015-04-18 13:02:15

标签: c++ language-lawyer variadic-functions

换句话说,当函数用' T'是某种类型别名:

T (...)

会有用吗?

如果您不知道此类声明指定了参数数量未知的函数。它是C ++标准所允许的,但它并没有为我们提供访问传递参数的标准方法。有<cstdarg>库但在省略号之前需要命名参数才能工作。它看起来像这样(使用另一个名为&#39; T1&#39;的别名):

T (T1, ...)

通常T1的类型为int,并且会对可变参数的数量进行分析。

然而,省略号可能是唯一的函数参数这一事实意味着这样的构造有一些目的,而且我很好奇它是什么?

此类功能的实际示例如下所示:

void func(...)
{
}

1 个答案:

答案 0 :(得分: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));
};