嗨 我有一个带有成员函数的类,该函数采用可变数量的参数。该类知道实例化后需要多少个参数。例如
class myClass
{
myClass(int num_args){na=num_args;};
private:
int na;
public:
void do_something(int num_args, ...);
}
void myClass::do_something(int num_args, ...)
{
va_list vl;
va_start(vl, num_args);
for(int i=0; i < num_args; i++)
do_anotherthing(va_arg(vl, type));
va_end
}
所以我最终调用如下:
myClass A(5);
myClass B(4);
A.do_something(5, a, b, c, d, e);
B.do_something(4, a, b, c, d);
对我来说,必须不断指定我传递的参数数量似乎很不整洁。解决这个问题的最佳方法是什么?我考虑过重载一堆函数,每个函数都有 n 个参数,一个宏来为我放入 num_args 。但理想情况下我希望能够将 do_something 定义为
void do_something(...);
并以某种方式让 stdargs 内容与类的 num_args 一起使用,而不是与传入的值一起使用。
非常感谢您的想法。
最佳答案
请不要这样做。可变数量的参数在 C++ 中非常罕见
实现您想要的效果的最佳方法是创建一个 int 列表并将该列表作为参数传递
您可以检查函数内列表的大小
关于C++ 如何在没有前面参数的情况下使用省略号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5495061/