草稿: c++ defer 实现

一个最简单的 defer 实现

  • 主要是测试了 template function args 的闭包传输
  • 其中 mutable 是关键,不然编译都是forward类型的报错
  • 另外 std::invoke 是低开销的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class defer : std::shared_ptr<defer> {
public:
template <class function_tt, class... args_tt>
explicit defer(function_tt &&func, args_tt &&...args)
: std::shared_ptr<defer>(
nullptr, [func = std::forward<function_tt>(func),
...args = std::forward<args_tt>(args)](defer *) mutable {
std::invoke(std::forward<function_tt>(func), std::forward<args_tt>(args)...);
}) {}
};


int main(int argc, char *argv[]) {
{
int x = 1;
{
defer def(
[&](int, int) {
std::cout << x << "\n";
x = 10;
}, 1, 2);
// defer def([](int &xy) { std::cout << xy << "\n"; }, std::ref(x));
}
std::cout << x << std::endl;
}
}

  • 结果:
    1
    2
    1
    10
------ 本文结束 ------
------ 版权声明:转载请注明出处 ------