有没有办法继续使用可变数量的参数的重载?
具体示例如下:
// Third party class
class ABC
{
public:
void addValue(int);
void addValue(float);
void addValue(string);
void execute(); // Any number of add values can be called before the execute
};
目前,当我想为此类的对象添加值时,我必须执行以下操作: ABC *obj = new ABC(); obj->addValue(2.0); obj->addValue("字符串"); 对象->执行();
有没有办法在客户端代码中我可以在 1 行中完成所有 addValues?
我尝试使用如下宏,但随后我必须为每个参数数量定义一个宏:
#define ADD_1_VALUES_TO_CLASS_ABC(obj, val1) { \
obj->addValue(val1) }
#define ADD_2_VALUES_TO_CLASS_ABC(obj, val1, val2) { \
obj->addValue(val1); obj->addValue(val2) }
#define ADD_3_VALUES_TO_CLASS_ABC(obj, val1, val2, val3) { \
obj->addValue(val1) ; obj->addValue(val2); obj->addValue(val3) }
是否有一些通用的方法来定义 MACRO ADD_N_VALUES_TO_CLASS_ABC 并将其称为
ABC *obj = new ABC();
MACRO ADD_N_VALUES_TO_CLASS_ABC(obj, "String", 1.0, 4);
MACRO ADD_N_VALUES_TO_CLASS_ABC(obj, 1, 2.0, "String", 4.0, 3);
此外,如果我使用可变数量的参数 va_args,我会丢失调用重载函数所需的类型信息吗?
提前致谢。