问题描述
我在double()(double)类型的类中有一个成员变量,但是有些要存储的函数id具有第二个默认参数,因此它们是double()(double ,double),所以我无法将其存储在当前的成员变量中。
是否可以将我的成员变量设置为double()(double,double),以便它还可以存储()(double)?有什么其他方法可以实现我想要的吗?还是在使用2个参数而不是1个的情况下需要2个不同的变量?
解决方法
您需要两个变量。调用中的参数数量必须与函数指针变量中的参数数量相匹配,因此不能将同一变量用于不同数量的参数。
如果一次只需要其中之一,则可以使用联合节省结构中的空间。
double somefunc(double);
double otherfunc(double,double);
struct mystruct {
union {
double(*onearg)(double);
double(*twoarg)(double,double);
} func
// other members
};
mystruct obj;
obj.func.onearg = somefunc;
double foo = obj.func.onearg(1.2);
obj.func.twoarg = otherfunc;
double bar = obj.func.twoarg(2.5,11.1);