Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing lambda function as parameter C++

I'm working on passing lambda functions R1 and R2 to my template function F. But, I'm not sure if I'm doing this correctly.

The Function F is supposed to use all the parameters from the main function and perform the related calculations (Newton's method of root approx.).

I'm new to working with template functions. So, any help would be much appreciated.

//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)))
    {

    }
like image 525
yuniktmr Avatar asked Oct 02 '18 06:10

yuniktmr


People also ask

How do you pass a lambda function as an argument?

Passing Lambda Expressions as Arguments If you are passing an instance of a class as a parameter, you must specify the class name or the object class as a parameter to hold the object. In Java, there is no type for lambda expression.

Can you pass a function as a parameter in C?

We cannot pass the function as an argument to another function. But we can pass the reference of a function as a parameter by using a function pointer.

Can we pass Auto as a parameter to function C++?

C++20 allows auto as function parameter typeAs an abbreviated function template. A placeholder-type-specifier designates a placeholder type that will be replaced later by deduction from an initializer.

What is lambda expression in C++11?

In C++11 and later, a lambda expression—often called a lambda—is a convenient way of defining an anonymous function object (a closure) right at the location where it's invoked or passed as an argument to a function.

How do you pass a lambda expression as a parameter?

C#. Passing Lambda Expression As Parameter Using delegates you can pass a lambda expression as a parameter to a function, and then use it in LINQ queries. This can be done with Func<…> delegates.

How do you declare a lambda function in C?

C# language specification. See also. You use a lambda expression to create an anonymous function. Use the lambda declaration operator => to separate the lambda's parameter list from its body. A lambda expression can be of any of the following two forms: Expression lambda that has an expression as its body: C#.

What is the Lambda body of a lambda expression?

The lambda body of a lambda expression is a compound statement. It can contain anything that's allowed in the body of an ordinary function or member function. The body of both an ordinary function and a lambda expression can access these kinds of variables: Captured variables from the enclosing scope, as described previously. Parameters.

How to use lambda functions as callbacks in C++?

We are able to use lambda functions as callbacks with the help of std:: function. To pass the value we generally use the following methods: Pass by value. Pass by reference. Let us demonstrate this with example code and use C++ as the programming for the example code.


1 Answers

First, as mentioned by @tkausl, you should not call the lambdas when you pass them as parameters, because this way the are automatically evaluated and produce values(long doubles in this case), but your function expects a function as a parameter.

Instead you should call the functions you give as parameters in the called function itself(F in this case).

You can use std::function to describe a function prototype, thus avoiding the "ugly" function pointers.

First you need to include the <functional> header file from the standard library.

Then you can write something like this:

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); 

Where in std::function<long double(long double)> the type in the parentheses denote the type of the function arguments and the type before the parentheses is the return type of the function prototype;

like image 141
Petok Lorand Avatar answered Oct 03 '22 04:10

Petok Lorand