定义一个方法:
#include <cstdarg>
void emit(const int& eventId, int count, ...);
注意最后面那三个点,它代表可变数量的参数。(count是...所指代的参数的数量)
实现这个方法:
void emit(const int& eventId, int count, ...)
{
va_list args;
va_start(args, count);
int x = va_arg(args, int);
int y = va_arg(args, int);
int w = va_arg(args, int);
int h = va_arg(args, int);
va_end(args);
}
通过va_list获取传入的参数,传入多少个参数都没问题。
va_end 必须调用,以确保正确清理 va_list。
使用这个方法的代码:
emit((int)WindowEventId::sizePosChanged,4,x,y,w,h);
注意那个4,4是参数数量。
你还可以把va_list转发到另一个方法中,如下代码所示:
void emit(const int& eventId, int count, ...)
{
va_list args;
va_start(args, count);
emitWin(eventId, count, args);
va_end(args);
}
void emitWin(const int& eventId, int count, va_list args)
{
int x = va_arg(args, int);
int y = va_arg(args, int);
int w = va_arg(args, int);
int h = va_arg(args, int);
}