C++ 委托机制
在GUI编程或者基于事件开发的项目中,经常需要使用回调函数. 为了处理这类回调事件, C# 特别提供了关键字delegate来实现.
函数指针回调做法
在传统的C++开发过程中, 为了实现函数回调,一般的做法是将 C++ 的函数指针传给管理者.当有事件触发时,再执行该回调函数.
基于函数指针的回调方式有一下缺点:
- 对萌新不友好, 上手困难
- 函数指针操作并不安全,无法在编译阶段检测来
C++11 新特性
为了解决此类问题, C++11 从boost库中借鉴了新特性 functional, 以此为容器存储函数指针,从而优雅的实现回调机制
案例演示:
- 存储自由函数
- 存储lambda表达式
- 存储std::bind 结果 (非常重要)
- 存储类成员方法和类实例
- 存储类成员方法和类实例指针
- 存储结构体方法
#pragma once
#include <functional>
#include <iostream>
void print_num(int i);
inline void print_num(int i)
{
std::cout << i << '\n';
}
struct PrintNum {
void operator()(int i) const
{
std::cout << i << '\n';
}
};
struct Foo {
Foo(int num) : num_(num) {}
void pri