如何为c ++中的函数重载算术运算符(+,*,-,/)?

时间:2019-05-07 14:04:05

标签: c++11 math operator-overloading overloading functor

我想实现一个数值积分,该积分的积分值在正交点求值。因此,类似integral(domain, f),其中domain确实是我要集成的域,而f是要集成的函数。 f仅是域内Point p(正交点)的函数,并且可以具有矢量值(标量是一种特殊情况)。

由于函数f通常可以是不同函数的组合,所以我想知道如何重载函数的算术运算符。

我已经找到了这个Implementing multiplication operator for mathematical functions C++ 但这并没有涵盖我的问题,因为Function仅返回x,而在我的情况下,我想使用其他函数可以返回x的更复杂函数。

因此,假设f_1,...f_N是具有相同返回类型的不同函数,例如具有给定长度M的std::array<double,M>,并且接收相同的输入Point p,即对于I = 1,...,N:

std::array<double,M> f_i(Point p)
      { std::array<double,M> x; 
        \\ compute x somehow depending on i
        return x;}

然后,我想创建f作为前一个f_1,...f_N的组合,例如f=f_1 *f_2+(f_3*f_4)*f_5...(此处的操作应视组件而定)。

通过这种方式,我可以在integral(domain, f)内求f(p),从而精确地获得每个正交点:

f_1(p) *f_2(p)+(f_3(p)*f_4(p))*f_5(p)...

编辑: 我知道我必须使用仿函数而不是简单的函数(我只是用来说明问题),但是我无法弄清楚该如何实现。 有提示吗?

谢谢

0 个答案:

没有答案