c++ - 只有未指定数量的参数的函数的目的是什么?

标签 c++ language-lawyer variadic-functions

换句话说,当函数像这样声明时,“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));
};

关于c++ - 只有未指定数量的参数的函数的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29717740/

相关文章:

c++ - 为什么 §12.2/5 中的第二个要点被视为本段中明确规定的异常(exception)情况?

c++ - 如何正确使用通过转发引用传递的可调用对象?

matlab - 输入几个 varargin 参数

c - C 中的可变参数函数 f() 与 f(...)

c++ - CComVariant 作为 VARIANT 传递

c++ - 打开简历 fisherfaces

c++ - 为什么这个数组不变成零?

c++ - Windows MessageBox 忽略 WM_CLOSE

c++ - 作为非类型模板参数的引用

matlab - 如何使用 varargin 和 varargout 包装函数?