c++可调用类型

c++可调用类型

1、函数名、函数指针、函数引用

#include <iostream>

void show(int x)
{
    std::cout << x << std::endl;
}

int main()
{
    show(2); (*show)(2)						// 函数名
    void (*p)(int) = show; p(3);  			// 函数指针
    void (&r)(int) = show; r(4);	  		// 函数引用
    return 0;
}

2、 成员函数指针

#include <iostream>

class A
{
public:
    void show(int a)
    {
        std::cout << a << std::endl;
    }
};

int main()
{
    void (A:: *pm)(int) = &A::show;
    A a;
    (a.*pm)(3);
    return 0;
}

3、仿函数

struct A { void operator()(int x) { cout << x << endl; } };
A a;  a(23);

4、lambda表达式

[]() {return 0; };  // 一个十分简单的 lambda 表达式
 
/* 编译器生成的对应的内部表示 */
class __lambda_11_5 { 					// 仿函数类
public: 
	inline int operator()() const { 	// operator() 重载
      return 0;
    }
    
    using retType_11_5 = int (*)();
    inline operator retType_11_5 () const noexcept{
      return __invoke;
    };
private: 
    static inline int __invoke()
    {
      return 0;
    }
} __lambda_11_5{}; 						// 匿名实例

5、 一个可被转换为函数指针的类对象

void show(int x) { cout << "show:" << x << endl; }
struct A {
    using pFunc = void(*)(int);			// 函数指针类型
    operator pFunc() { return show; }   // 可以返回 show,也可以返回 &show,两者含义相同
};
struct B {
    using rFunc = void(&)(int);			// 函数引用类型
    operator rFunc() { return show; }	
};
 
A a;    a(4); // 打印 show:4,说明完成了隐式类型转换
B b;	b(5); // 打印 show:5,说明完成了隐式类型转换
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值