网站搭建 商城 seo,wordpress用户的区别,发布外链的步骤,广告设计怎么做详细讲解C的可调用对象
在C中#xff0c;存在“可调用对象#xff08;Callable Obiects#xff09;这么一个概念。准确来说#xff0c;可调用对象有如下几种定义#xff1a; 是一个函数指针 是一个具有 operator() 成员函数的类对象#xff08;仿函数#xff09; 是一…详细讲解C的可调用对象
在C中存在“可调用对象Callable Obiects这么一个概念。准确来说可调用对象有如下几种定义 是一个函数指针 是一个具有 operator() 成员函数的类对象仿函数 是一个可被转换为函数指针的类对象 是一个类成员函数指针
它们在程序中的应用如下所示
void func(void)
{//...
}struct Foo
{void operator() (void){//...}
};struct Bar
{using fr_t void(*)(void);static void func(void){//...}operator fr_t(void){return func;}
};struct A
{int a_;void mem_func(void){//...}
};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) //4. 类成员函数指针 A::mem_func;intA::*mem_obj_ptr //或者是类成员指针 A::a_;A aa;(aa.*mem_func_ptr)();aa.*mem_obj_ptr 123;return 0;
}从上述可以看到除了类成员指针之外上面定义涉及的对象均可以像一个函数那样做调用操作。
在 C11中像上面例子中的这些对象func_ptr、foo、bar、mem_func_ptr、mem_obj_ptr都被称做可调用对象。相对应的这些
对象的类型被统称为 “可调用类型” 细心的读者可能会发现上面对可调用类型的定义里并没有包括函数类型或者函数引用(只有函数指
针)。这是因为函数类型并不能直接用来定义对象而函数引用从某种意义上来说可以看做一个const 的函数指针。
C 中的可调用对象虽然具有比较统一的操作形式除了类成员指针之外都是后面加括号进行调用但定义方法五花八门。这样在我
们试图使用统一的方式保存或传递一个可调用对象时会十分烦琐。
现在C11通过提供 std::function 和 std::bind 统一了可调用对象的各种操作。
该文章会更新欢迎大家批评指正。
推荐一个零声学院免费公开课程个人觉得老师讲得不错 分享给大家LinuxNginxZeroMQMySQLRedis fastdfsMongoDBZK流媒体CDNP2PK8SDocker TCP/IP协程DPDK等技术内容点击立即学习: 服务器课程C服务器