例如,如何将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
答案 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