# 杂项
- explicit
构造函数默认是隐式转换的,如果想要禁止隐式转换,可以使用 explicit 关键字修饰构造函数。
比如
1 |
|
- 回调函数
回调函数是一种函数指针,它允许在运行时指定一个函数,并在某个事件发生时调用该函数。
人话:一个被作为参数传递给另一个函数,并在 “合适的时候” 被调用的函数。
1 |
|
std::function 能装什么?
- 普通函数
1 | void greet() { std::cout << "Hello!\n"; } |
- Lambda 表达式
1 | int x = 42; |
- 函数对象
- 成员函数
-
mutable std::mutex mtx_;
mutable关键字表示变量可以在常量函数中修改。
如果没有 mutable,mtx_ 是普通成员变量,在 const 函数中,所有成员都被视为 const,调用 mtx_.lock () 会报错 -
std::unique_lockstd::mutex lock(mtx_)
进入时自动调用 mtx_.lock ()(当前线程获得锁),当 lock 变量离开作用域(比如函数返回、出 {}),会自动调用 mtx_.unlock () -
lambda
有点抽象,有空继续研究
https://c.biancheng.net/view/bl1yvwy.html
- 作为函数对象(Functor)替代手写类
1 | struct IsEven { |
- STL 算法的自定义谓词(最常用!)
1 | std::vector<Person> people = {...}; |
- condition_variable
不希望 FSM 的 worker 线程这样:
1 | while (true) { |
condition_variable 的作用:
- 队列空 → 工作线程睡觉
- 有事件 → 唤醒工作线程
写法:
1 | cv.wait(lock, []{ return !queue.empty(); }); |
-
atomic 库
atomic<bool>原子变量,线程安全的 bool -
匿名函数
-
workerThread + 队列 + 状态机