如何在C ++中返回复合函数的函数指针?

时间:2018-12-17 06:55:44

标签: c++ matlab c++14

例如,如何将matlab中的以下代码转换为c ++等效项?

function g = Transform(funct, y)

         h = @(x) funct(x) +y;
         g = @(x) sign(h(x));
 end

上面的代码接受一个名为“ funct”的函数和一个输入值“ y”。它输出一个名为g的新(转换)函数。

在matlab中的用法是

function main()
  for i = 1:5
     y = rand();
     funct = Tranform(funct,y);
  end

 disp(funct(1.27)); % after transformed 5 times

end

function z = funct(x)
     z = x;
end

1 个答案:

答案 0 :(得分:2)

可以,但是看起来有些混乱。为此,您可以将lambda函数与std :: function一起使用

#include <iostream>
#include <string>
#include <functional>


template <typename T> int sgn(T val)
{
    return (T(0) < val) - (val < T(0));
}

std::function<int(double)> transform(std::function<double(double)> funct, double y )
{
    std::function<int(double)> h = [=](double x) -> int
    {
        return sgn(funct(x) + y);
    };

    return h;
}


int main()
{
    auto f = [](double x) -> double { return x + 5.; };
    auto res = transform(f, 5.);
    std::cout << res(-15.) << std::endl;
}

哪个输出:

  

res(-10)-> 0

     

res(> -10)-> 1

     

res(<-10)-> -1