C++11教程
+ -

C++11 Lambda与仿函数

2023-06-06 9 0

在C++11之彰,我们在使用 STL算法时,通常会用一些特别的对象-仿函数。其本质就是重定义了成员函数operator的一种自定义类型对象。这样的函数有个特点,就是使用在代码层和普通的函数并无两样,但其本质并非相同。
一般情况下,仿函数我们可以写作如下:

class CFactor
{
public:
    int operator()(int a, int b)
    {
        return a + b;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{

    CFactor factor;
    int v = factor(1, 2);
    return v;
}

在这个例子中,CFactor的operator被重载,因此,在调用该函数时,我们看到跟函数调用一样的形式,只不过factor不是函数名,是一个类的实例-对象名称。

当然相对于普通函数,因为仿函数本质就是一个类对象调用operator()的重载,故类对象在构造时可使用构造函数传递参数来初始化,这样这个仿函数就有了一个初始的状态。

class CMoney
{
public:
    CMoney(int p=2) :m_price(p)
    {

    }
private:
    int m_price;
public:
    int operator()(int num)
    {
        return num*m_price;
    }
};

int _tmain(int argc, _TCHAR* argv[])
{

    CMoney money(5);
    int v = money(3);
    return v;
}

仔细观察话,除过仿函数类的构造函数,发现以上两者的代码很类似,其实这两个仿函数的实现可以很简单地使用lambda来实现。

int _tmain(int argc, _TCHAR* argv[])
{
    int price = 5;
    auto money = [price](int num)->int{return num*price; };
    int v = money(3);
    return v;
}

我们可以看到,使用lambda使用了更少的代码来实现相同的功能。

0 篇笔记 写笔记

C++11 Lambda语法
从软件开发的角度讲,以lambda概念为基础的“函数式编程”(Functional Programming)与命令式编程(Imperative Programming)、面向对象编程(Object-orientated Programming)等并列的一种编程范例。C++11中的lambdaC++......
C++11 Lambda仿函数
在C++11之彰,我们在使用 STL算法时,通常会用一些特别的对象-仿函数。其本质就是重定义了成员函数operator的一种自定义类型对象。这样的函数有个特点,就是使用在代码层和普通的函数并无两样,但其本质并非相同。一般情况下,仿函数我们可以写作如下:class CFactor{public:......
C++ 仿函数(Functors)
在C++中,仿函数(Functors)是一种重载了函数调用运算符 operator() 的类或结构体。它可以像函数一样被调用,有助于实现更灵活和可定制的函数对象。下面是C++中仿函数的各种用法和示例代码:1. 作为函数对象调用:#include struct ......
Lambda表达式
1.什么是Lambda表达式名称Lanbda来自landba caculus(λ演算)—一种定义和应用函数的数学系统。这个系统能让您使用匿名函数—即无需给函数命名。在C++11中,对于接受函数指针或函数符的的函数,可使用匿名函数定义(lambda)作为其参数。与前述函数f3对应的lambda如下:......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!