va_start()和对象编程

时间:2014-12-10 14:04:37

标签: c++ parameters variadic-functions

我正在尝试执行va_list的对象实现。用词来解释很复杂,所以看看代码:

class auto_va
{
public:
    va(int n)
    {
        va_start(varg, n);
    }
    ~va()
    {
        va_end(varg);
    }

private:
    va_list varg;

public:
    va_list& get_va()
    {
        return varg;
   }
};

double sum(int number, ...)
{
    int result(0);

    auto_va varg(number);

    for (;number != 0; --number)
        result += va_arg(varg.get_va(), int);

    return result;
}

int main()
{
    std::cout << sum(6, 1, 5, 3, 4, 7, 8) << std::endl;
}

当到达块的结尾时,目标是自动va_end。问题是我无法在固定参数函数中使用va_start,因此,上面的代码无法编译。

我知道我混合了老派过时的C和C ++对象功能,但问题仍然很奇怪。是否有一个有趣的解释或什么?

最后,是否有一个正确的替代方案,我尝试做什么,或者替代C风格的无限参数功能?

0 个答案:

没有答案