美文网首页
可调用对象归纳

可调用对象归纳

作者: 守拙圆 | 来源:发表于2018-04-27 15:01 被阅读22次

首先需要了解一个 callable 概念,callable 故名就是可以调用的对象。在 c/c++ 中一共存在以下几种 callable 对象:

1. 函数

void func()
{
}

显然函数名 func 是一个可调用对象

2. 函数指针

func_t func;

上述的 func 指针也是一个可调用对象。

3. 重载 () 操作符的类

struct Callable
{
 public: 
    void operator()();
};

Callalbe x;
x();

上述类型 Callable 的对象 x 是可调用对象。

4. bind 函数封装的函数对象

// 类的构建函数的初始化参数的一种类似的方式
class range {
public:
    bool operator() (int lb, int ub, int val) {
        return (lb <=val && val <=ub);
    }
};

auto presult = find_if(vec.begin(), vec.end(), \
                       bind(range{}, 5, 10, placeholders::_1));   //placeholders::_1 here可能代表val,暂不懂

其中bind 产生的函数对象的原型为 bool func(int val)。bind也可以用于封装函数对象。

5. lambda 表达式

auto f=[](int a,int b){return a>b;};

“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

由于Lambda的类型是唯一的,不能通过类型名来显式声明对应的对象,但可以利用auto关键字和类型推导:

相关文章

  • 可调用对象归纳

    首先需要了解一个 callable 概念,callable 故名就是可以调用的对象。在 c/c++ 中一共存在以下...

  • 小结-Python-可迭代、迭代器和生成器的区别

    可迭代对象 可迭代对象指的是定义了_ _ iter _ _ 方法的对象,调用该方法会返回一个迭代器对象。 可迭代对...

  • 调用静态方法与非静态方法

    以前一直认为 静态方法的调用:类名::静态方法 非静态方法的调用:类对象->非静态方法 在网上找到的归纳 类::静...

  • Kotlin 内联函数 apply、let、run、with、a

    Apply 用this代表当前引用对象; 调用其方法时,this可省略; 一定有返回值,且返回值为当前对象 对象可...

  • 7月4日 晴

    1.可扩展性表示对象是否可以扩展,可以调用Object.esExtensible判定对象是否可扩展,Object....

  • 传递消息objc_msgSend

    在OC中,如果像对象传递消息,就会调用动态绑定机制来绝对调用的方法,对象在接收消息时调用的方法则由运行期决定,也可...

  • 迭代器和生成器

    for..of 语句for..of会遍历可迭代的对象,调用对象上的Symbol.iterator方法。 下面是在数...

  • jQuery的动画和jQuery的事件

    1.jquery链式调用 jquery对象的方法会在执行完后返回这个jquery对象,所有jquery对象的方法可...

  • Python 不可变对象

    不可变对象=》可哈希 对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新...

  • Dart学习-类

    使用类成员 对象的成员包括函数和数据(分别是方法和实例变量)。当你调用一个方法时,你在一个对象上调用它:这个方法可...

网友评论

      本文标题:可调用对象归纳

      本文链接:https://www.haomeiwen.com/subject/byvblftx.html