2

可能重复:
“……”令牌的含义是什么?

有一种相对较新的方法可以直接指定函数类型(至少,作为模板参数)。不知道这是否是严格的 C++11,但我在阅读 GCC 4.7 的 STL 标头时遇到了它。

就像这样:

std::function<void(int, char**)> f;

现在,在头文件<functional>中,我看到以下内容:

template <typename R, typename... A>
struct SomeStruct<R(A...)> { /* */ };

这是可以理解的:SomeStruct具有返回类型R和参数类型的函数类型的显式特化A

但是考虑这个声明(在下一行):

template <typename R, typename... A>
struct SomeStruct<R(A......)> { /* */ };

那个双省略号是什么意思?

4

1 回答 1

3

我个人觉得不清楚,但如果你知道这些是等价的,那就更有意义了:

void example(int, char, ...); // C-style variadic arguments
void example(int, char...);   // equivalent: the comma before the ellipses is optional

因此,专业化只是涵盖了函数采用以下形式的情况:

R(A..., ...)

比如 in sprintf: Ris int, A...is char*and const char*, 它是 C 风格的可变参数。

于 2012-07-11T06:42:03.590 回答