我是相当新的,我试图想出一个例子来帮助我理解多态性,类型擦除和std :: function的使用 .
我试图通过创建这个示例类来理解,它可以接受一个基值,然后是一个std :: function,然后对基值进行许多数学运算之一 .
double multiplyValue(double baseVal, double multiplyBy) {
return baseVal * multiplyBy;
}
double divideValue(double baseVal, double divideBy) {
return baseVal / divideBy;
}
double subtractFromDividedValue(double baseVal, double subtract, double divideBy) {
return subtract - (baseVal / divideBy);
}
double inverseSubtract(double baseVal, double subtract) {
return -(baseVal - subtract);
}
class PrintValue
{
public:
PrintValue(int baseVal, std::function<double(double, double)> modifierFunc) {
this->baseVal = baseVal;
this->modifierFunc = modifierFunc;
}
void print() {
std::cout << "Value : " << modifierFunc(baseVal, 2) << "\n";
}
private:
int baseVal;
std::function<double(double, double)> modifierFunc;
};
int main()
{
PrintValue multiplyVal(2, multiplyValue);
multiplyVal.print();
PrintValue divideVal(2, divideValue);
divideVal.print();
system("pause");
return 0;
}
我的PrintVal类工作multiplyValue divideValue和inverseSubtract因为它们具有相同的方法签名 - 但是当我希望我的“PrintValue”类能够接受subtractFromDividedValue函数时......这就是我感到困惑的地方!
此外,我注意到我已经硬编码“2”作为方法参数传递到print()函数中的modifierFunc .
我希望能够动态地将不同数量的方法参数传递到类中,但这里很困惑,因为subtractFromDividedValue具有比其他数学函数更多的参数 . 所以我认为我只需要创建一个接口,并为所有可能的参数排列重载类,这是正确的吗?
最后我只想要一个可以将函数传递给动态修改“baseValue”的类......
干杯
1 回答
有很多方法可以做到这一点,最好是尝试一下并看看它们如何发挥作用 - 如果认为某些事情很有希望但你会陷入困境,那就在这里创建一个新问题 . 作为一种方法的示例,您可以使用
baseVal
进行修改,使用vector
提供的可变数量的参数以及应用转换的函数.........你可以创建合适的功能,如......
为了获得更大的灵活性,您可以在调用
print
时添加参数: