[笔记] 可调用对象/可调用类型

c++中存在“可调用对象(Callable Objects)”这样一个概念。

可定义为以下几种:

1. 是一个函数指针
2. 是一个具有 operator() 成员函数的类对象(仿函数)
3. 是一个可被转换为函数指针的类对象
4. 是一个类成员(函数)指针

#include <iostream>
using namespace std;

void func(void)
{
	//...
	cout << "void func" << endl;
}
struct Foo
{
	void operator()(void)
	{
		//...
		cout << "Foo struct" << endl;
	}
};
struct Bar
{
	using fr_t = void(*)(void);
	static void func(void)
	{
		//...
		cout << "Bar func" << endl;
	}
	operator fr_t(void)
	{
		cout << "Bar fr_t" << endl;
		return func;
	}
};
struct A
{
	int a_;
	void mem_func(void)
	{
		//...
		cout << "A struct mem_func" << endl;
	}
};
int main(void)
{
	void(*func_ptr)(void) = &func;				//1.函数指针
	func_ptr();

	Foo foo;						//2.仿函数
	foo();

	Bar bar;						//3. 可被转换为函数指针的类对象
	bar();

	void (A::*mem_func_ptr)(void) = &A::mem_func;	        //4.类成员函数指针
	int A::*mem_obj_ptr = &A::a_;				//  或者是类成员指针

	A aa;
	(aa.*mem_func_ptr)();
	aa.*mem_obj_ptr = 123;
	return 0;
}

 运行结果:

上面涉及的对象均可像一个函数那样做调用操作,这些对象(func_ptr、foo、bar、mem_func_ptr、mem_obj_ptr)都被称作可调用对象,这些对象的类型被称作“可调用类型”。

C++11通过提供std::function和std::bind统一了可调用对象的各种操作。

std::function---------可调用对象包装器

它是一个类模板。可以容纳除了类成员(函数)指针之外的所有可调用对象。通过指定它的模板参数,它可以用统一的方式处理函数、函数对象、函数指针,并允许保存和延迟执行它们。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初阳-.-#

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值