说我有
double xSquared( const double )
{
return x*x;
}
...
std::function<double (double)> func = &xSquared;
...
到目前为止,这对于我使用这种结构的(更复杂的)目的来说效果很好。现在我有一个接受上述形式的 std::function 的函数,我需要创建一个新的 std::function 来扩展原来的:
typedef std::function<double (double)> func1D;
double someFunction( const func1D &func, const double a )
{
func1D extendedFunc = func/(x-a); // I know this is incorrect, but how would I do that?
...
}
所以数学等价物是:
f(x) = x²
g(x) = f(x)/(x-a)
我怎样才能做到这一点?感谢您的帮助!
最佳答案
既然您已经在使用 C++0x,为什么不直接使用 lambda 表达式呢?
func1D divideByXMinusA(const func1D& f, double a) {
return [=](double x) { return f(x)/(x-a); };
}
编辑:使用 std::bind
:
func1D divideByXMinusA_withBind(const func1D& f, double a) {
using namespace std::placeholders;
return std::bind(std::divides<double>(),
std::bind(f, _1),
std::bind(std::minus<double>(), _1, a));
}
关于c++ - 组合 std::function 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4008369/