也谈可变参数
最近,自己搞了个小程序。要用到可变参数
为方便以简单代码陈列如下:
template <class T>
T t_Max(const T& arg, ...)
{
va_list arg_ptr;
va_start(arg_ptr, arg);
T data = arg
while (data != (T)(NULL))
{
data = va_arg(arg_ptr, T);
...//使用“<”比较代码,略
}
va_end(arg_ptr);
return data;
}
这个函数想实现求最大值
普通类型比如:
cout<<t_Max('1', '2', '4', '3');
cout<<t_Max(1, 3, 55, 3, 45);
都能够调试通过
而其他类型,例如,重载过<运算符的自定义类就不可以,必须指定参数的结束标志
class User
{
public:
......
};
User a, b, c, d;
User t = t_Max(a, b, c, d, NULL);
必须手动添加上。
使用宏定义,#define MAX(argv) (t_Max(argv##, NULL))
也是不行的,看似正确,仔细分析就不对了
请教各位,如果如何实现这样
t_Max(T const& arg, ...)
{
}
Max(T const& arg, ...)
{
return t_Max(arg, ..., NULL);
}
怎样实现类似的功能。
欢迎讨论