返回一个计算了参数的函数
Return a function with parameters evaluated
我对C++相当陌生,我想执行以下操作,但不知道如何做。
我想基于带有一些参数的模板定义一个函数。假设我们有f(x)=a*x+b
,但参数a
和b
将作为参数传递。
我想定义一个函数create_function(double a, double b)
,它返回带有a
的a*x+b
,并b
对传递的任何参数进行评估,以便我可以使用另一个函数func( double x )
来计算它。
目标是使用给定的参数只创建一次函数,以便它可以被另一个例程重复调用,只需f(x)
。真正的功能比这复杂得多,但我能够适应它。
我一直在看这篇文章,它会与此类似,但我不知道如何使其适应返回仍然依赖于x
的函数。
你可以用lambdas做到这一点:
auto create_function(double a, double b)
{
return [a, b](double x) { return a * x + b; };
}
void test()
{
auto func = create_function(2.0, 3.0);
double y = func(4.0); // y is now 11
}
演示(显示编译器已经知道func(4.0)
将始终返回 11(
您可以使用 lambda 函数来实现此目的:
auto f = [a, b](auto x) { return a * x + b; };
。或者,要实际将其包装到函数中:
auto create_function(double a, double b) {
return [=](auto x) { return a * x + b; };
}
实际上,lambda 函数只是创建函数对象的一种 [更] 方便的方法。
您可以使用 std::bind:
#include <functional>
#include <iostream>
double f(double a, double b, double x) { return a * x + b; }
std::function<double(double)> create_function(double a, double b) {
using std::placeholders::_1;
return std::bind(f, a, b, _1);
}
int main() {
auto func(create_function(1, 2));
std::cout << func(4) << std::endl;
return 0;
}
目标是使用给定的参数创建一次函数,以便它可以被另一个例程重复调用为 f(x(。真正的功能比这复杂得多,但我能够适应它。
如果您需要存储多个稍后调用的实现,请考虑将结果存储在std::function
中(否则,由于每个 lambda 都有唯一的类型,您将无法存储该函数(。
我一直在看这篇文章,它会与此类似,但我不知道如何使其适应返回仍然依赖于 x 的函数。
auto create_function(double a, double b)
{
return [a, b](double x) { return a*x + b; };
}
client code:
std::function<double(double)> computation = create_function(3., 4.);
double y1 = computation(1.0);
double y2 = computation(2.0);
computation = another_lambda_implementation(/*arguments here*/);
double y3 = computation(2.0);
相关文章:
- 错误:参数中无效地使用了无效表达式
- 我在这里正确传递参数了吗?
- 我正在尝试传递DMA数组及其大小作为参数,但它给出了错误
- 模板模板参数:以下示例中应用了什么规则
- 返回一个计算了参数的函数
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- C++模板参数之间的比较似乎被忽略了
- 宏函数调用缺少参数警告,即使给定了参数
- 我写了一个类,它总是将其函数参数委托给它的成员,我该如何改进代码
- SFINAE 和模板函数实例化:为什么在启用了 SFINAE 类型的函数参数中使用模板参数时无法推断模板参数?
- C++程序给出了太多参数警告
- WinAPI 混淆了函数参数
- 变量参数列表 后面的'const std::string&'弄乱了堆栈
- 在允许的函数模板的明确专业化中扣除了多个模板参数
- 我是否误解了此默认参数共享的范围
- 推论忽略了参数包
- 如果指定了参数,如何将地址分配给函数指针
- 如何在不传递参数的情况下,将默认定义了参数的函数作为参数传递?C++
- OpenGL GLEW的替代品,定义了参数或解决方案
- 回调函数混淆了参数