我正在努力将 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)))
{
}
首先,正如 @tkausl 所提到的,当您将 lambda 作为参数传递时,不应调用它们,因为这样它们会自动求值并生成值(在本例中为长双精度值),但您的函数需要一个函数作为参数。
相反,您应该在被调用函数本身中调用作为参数提供的函数(在本例中为 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)>
括号中的类型表示函数参数的类型,括号之前的类型是函数原型的返回类型;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)