未指定的功能参数

时间:2013-08-05 23:49:40

标签: c++ c++03

GManNickG's answer中,他使用了符号:

template <typename>
static no& test(...);

最初我认为这只是“插入blah”的简写,用户必须替换自己的类型:

template<typename>
static no& test(int);

但是,在没有任何更改的情况下在编译器中测试它之后就可以了!此外,在原始问题的上下文中使用...与显式int时,重载解析的行为与预期一致。

在C ++中这叫做什么03 /我应该如何解释这段代码?它看起来与C ++ 11的可变参数模板很接近,但两者之间存在一些明显的差异。

1 个答案:

答案 0 :(得分:2)

是,省略号指定可变参数函数(可变长度参数列表)。您可以使用va_startva_argva_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;
}