C++中的参数个数未知,你怎么处理

C++中的参数个数未知,你怎么办?
C++中的参数个数未知,你怎么办?
看了一篇文章http://www.cppblog.com/3522021224/archive/2007/06/09/25869.html
写关于怎么实现多个参数的函数传参。
里面的方法,确实能达到要求。
但是不大理解...才参数列表中是什么意义,

参数传多参,你觉得有意义吗,说说你的看法吧。
还有貌似BOOST中有一个东东可以替代它。

------解决方案--------------------
参数个数未知,那就使用可变参数列表吧。

http://www.cppblog.com/3522021224/archive/2007/06/09/25869.html
这里不是说得很详细了么。
------解决方案--------------------
可变参数列表当然很有用啊,

而且有些什么你必须用可变参数列表

比如

printf
------解决方案--------------------
可变参数列表时C语言中就有的(可能在更早的语言中就有了)。当然STL中的容器可以基本代替它的作用。但是当时还没有STL,还没有C++,所以可变参数列表就成了高效率的“参数容器”,帮助程序员处理未知数量参数的情况。如在printf和scantf中。
在C++中,保留了C的这个特性,一方面是向上兼容,一方面则是因为效率。可变参数列表是通过重用系统栈实现的,因此比使用堆分配的容器要快上很多。

要了解可变参数列表的实现方式,首先要了解函数调用的方式。当调用一个函数时,系统不仅会将当前状态(包括通用寄存器,活动记录指针,处理器状态等)压栈,也会将函数的实参(一般是以逆序,第一个参数在栈顶方向)以及当前的指令计数器值(即函数的返回地址)压栈。当然,具体的顺序由各自的系统定义。这里,非常重要的是“活动记录指针”,一次函数调用中所有压栈的项目组成一个活动记录,而活动记录指针指向(栈中)前一条活动记录指针存储位置的地址;这样,所有的活动记录指针就形成了调用链表。这个机制,保证了在进入函数体后,系统知道上一个活动记录在哪里,因此可以界定出本次调用的实参列表长度。在函数调用结束后,系统找到本次调用的活动记录,用它来恢复调用前的状态,同时栈顶指针也会到调用前,程序继续运行。

所以,即使参数列表长度是可变的,系统仍然可以通过上一条活动记录的开始位置界定处本次调用参数列表的开头和结尾处,并提供va_list及相关操作来访问它。了解这个机制,就可以明白以指向第一个参数的指针开始,是可以遍历所有参数的。
------解决方案--------------------
变长参数?
------解决方案--------------------
void func(int count, ...)
{
int *p=&count+1;

for (int i=0;i <count;i++,p++)
{
cout < <*p < <endl;//依次输出参数列表中的参数
}
}