将 lambda 函数作为参数 C 传递

新手上路,请多包涵

我正在将 lambda 函数 R1 和 R2 传递给我的模板函数 F。但是,我不确定我这样做是否正确。

函数 F 应该使用主函数中的所有参数并执行相关计算(牛顿法的根近似)。

我是使用模板函数的新手。因此,任何帮助将不胜感激。

 //main.cpp
    #include <iostream>
    #include "Funct.h"
    using namespace std;

    int main()
    {

        auto f1 = [](long double x) { return (x * x) - 2; };
        auto f2 = [](long double x) { return (2 * x);
        auto RV1 = F<long double>(1.0L,1.0E-20L,f1(1.0L),f2(1.0L));
        return 0;

    }

    //Funct.h
    #include <iostream>
    #include<cmath>
    template<typename T> T F(long double guess, long double tolerance,T ((*f)(const T x)), T((*df)(const T x)));
    template<typename T> T F(long double guess, long double tolerance,T ((*f)(const T x)), T((*df)(const T x)))
    {

    }

原文由 yuniktmr 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 447
1 个回答

首先,正如@tkausl 所提到的,当您将 lambdas 作为参数传递时,您不应调用它们,因为这样会自动评估并产生值(在这种情况下为 long doubles),但您的函数需要一个函数作为参数。

相反,您应该在被调用函数本身(在这种情况下为 F)中调用作为参数提供的函数。

您可以使用 std::function 来描述函数原型,从而避免“丑陋”的函数指针。

首先,您需要包含标准库中的 <functional> 头文件。

然后你可以写这样的东西:

 template <typename T>
using Func = std::function<T(T)>;

template <typename T>
T F(long double guess, long double tolerance, Func<T> f, Func<T> df);

其中 std::function<long double(long double)> 括号内的类型表示函数参数的类型,括号前的类型是函数原型的返回类型;

原文由 Petok Lorand 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题