C++ “解包”是什么类型的参数&引用;?

C++ “解包”是什么类型的参数&引用;?,c++,variadic-templates,C++,Variadic Templates,我在libstdc++(g++4.7.1)中查看了的源代码,发现了以下代码(): 最后一个…实际上相当于,… 这使得模板参数: Res(Args..., ...) 这意味着这是一个模板,具有可变数量的固定参数。对于您的后续问题:@Yuushi:确实如此..…似乎不能很好地使用搜索功能和搜索引擎。@Zeta我刚刚在Google中搜索了C++“六点”,它成功了:P@Zeta公平地说,它绝对是C++中最奇怪的角落之一。不久前我偶然发现了这个答案,所以它在我的记忆中相对新鲜。。。 #include &

我在libstdc++(g++4.7.1)中查看了
的源代码,发现了以下代码():


最后一个
实际上相当于
,…

这使得模板参数:

Res(Args..., ...)

这意味着这是一个模板,具有可变数量的固定参数。

对于您的后续问题:@Yuushi:确实如此
..…
似乎不能很好地使用搜索功能和搜索引擎。@Zeta我刚刚在Google中搜索了
C++“六点”
,它成功了:P@Zeta公平地说,它绝对是C++中最奇怪的角落之一。不久前我偶然发现了这个答案,所以它在我的记忆中相对新鲜。。。
#include <iostream>
#include <type_traits>
#include <iomanip>

template <typename Functor>
struct tester : std::integral_constant<int, 0>{};

template <typename Res, typename... Args>
struct tester<Res(Args...)> : std::integral_constant<int, 1>{};

template <typename Res, typename... Args>
struct tester<Res(Args......)> : std::integral_constant<int, 2>{};

#define STR_EXPAND(tok) #tok
#define STR(tok) STR_EXPAND(tok)
#define TEST_PARAM_1 void(*)(int, int)
#define TEST_PARAM_2 void(int, char, std::ostream&)
#define TEST_PARAM_3 void()

int main(){
    using std::setw;
    std::cout
    << setw(65)<< STR(TEST_PARAM_1) ": " << tester<TEST_PARAM_1>::value << "\n"
    << setw(65)<< STR(TEST_PARAM_2) ": " << tester<TEST_PARAM_2>::value << "\n"
    << setw(65)<< STR(TEST_PARAM_3) ": " << tester<TEST_PARAM_3>::value << "\n";
}
Res(Args..., ...)