我正在尝试执行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风格的无限参数功能?