c++ 可调用对象的绑定器和包装器

本文详细介绍了C++中可调用对象的各种形式,包括普通函数、静态成员函数、仿函数、lambda函数和类的非静态成员函数,以及如何通过函数指针、包装器如function和bind进行操作,同时讨论了回调函数和替代虚函数的用法及性能优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可调用对象

在C++中,可以像函数一样调用的有:

普通函数、类的静态成员函数、仿函数、lambda 函数、类的成员函数、可被转换为函数的类的对象,统称可调用对象或函数对象

可调用对象有类型,可以用指针存储他们的地址,可以被引用

普通函数

普通函数类型可以声明函数、定义函数指针和函数引用,但是,不能定义函数的实体

#include<iostream>
#include<string>
using namespace std;

using Fun = void(int,const string&);
Fun show;//声明普通函数show  不能用函数类型定义函数

void show(int x,const string&s){
   
	cout<< x <<"--"<< s <<endl;
}
int main(){
   
	show(1,"我是一个鸟");
	
	void (*f1)(int,const string&) = show;//函数指针指向函数
	void (&f2)(int,const string&) = show;//函数引用指向函数
	f1(2,"hello");
	f2(3,"world");

	Fun *f3 = show;//函数指针指向函数
	Fun &f4 = show;//函数引用指向函数
	f3(4,"hello");
	f4(5,"world");
    return 0;
}

类的静态成员函数

类的静态成员函数和普通函数本质上是一样的,把普通函数放在类中而已

#include<iostream>
#include<string>
using namespace std;

using Fun = void(int,const string&);
Fun show;//声明普通函数show  不能用函数类型定义函数
struct AA{
   
	static void show(int x,const string&s){
   
		cout<< x <<"--"<< s <<endl;
	}
};

int main(){
   
	AA::show(1,"我是一个鸟");
	
	void (*f1)(int,const string&) = AA::show;//函数指针指向函数
	void (&f2)(int,const string&) = AA::show;//函数引用指向函数
	f1(2,"hello");
	f2(3,"world");

	Fun *f3 = AA::show;//函数指针指向函数
	Fun &f4 = AA::show;//函数引用指向函数
	f3(4,"hello");
	f4(5,"world");
    return 0;
}

仿函数

本质是类

class TT{
   
public:
    void operator()(int b,const string&s){
   
        cout<< b<<"=="<<s <<endl;
    }
};


int main() {
   
    TT t;
    t(0,"dad");//对象调用
    TT()(1,"dasd");//匿名对象调用仿函数

    TT&t0 = t;
    t0(2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值