在GManNickG's answer中,他使用了符号:
template <typename>
static no& test(...);
最初我认为这只是“插入blah”的简写,用户必须替换自己的类型:
template<typename>
static no& test(int);
但是,在没有任何更改的情况下在编译器中测试它之后就可以了!此外,在原始问题的上下文中使用...
与显式int时,重载解析的行为与预期一致。
在C ++中这叫做什么03 /我应该如何解释这段代码?它看起来与C ++ 11的可变参数模板很接近,但两者之间存在一些明显的差异。
答案 0 :(得分:2)
是,省略号指定可变参数函数(可变长度参数列表)。您可以使用va_start
,va_arg
和va_end
宏来“拉出”参数。但是你需要一个初始论点;他们需要一个起始位置来开始从堆栈中抓取参数(省略号之前的arg
+ sizeof(arg)
)。
/* sum a bunch of ints */
int sum(int arg_cnt, ...) {
va_list ap;
va_start(ap, arg_cnt);
int sum = 0;
for(int i = 0; i < arg_cnt; ++i) {
sum += va_arg(ap, int);
}
va_end(ap);
return sum;
}