|
|
1
20
与其他答案不同,这种实现的开销为零,而且语法更好,更易于使用。它还具有零依赖性,减少了编译时间。 您可以将此代码段粘贴到代码库中的任何位置,它就会正常工作。
用法:
例子:
P.S.:本地延迟器对象以
|
|
|
2
10
有一个
proposal for
对于资源,它定义了一个通用
It will be considered for likely adoption in the Post-C++17 standard. |
|
|
3
6
我展示了Go风格的仅头实现
The implementation 看起来像这样:
是的,这就是整个文件:只有15行代码!它需要C++11或更高版本,并且需要编译器支持
The original source 还有一个C89版本,通过利用一些 非常 GCC特定属性。 |
|
|
4
2
这是我的解决方案,类似于您在swift中遇到的类型,但我不处理任何异常(如果需要,可以很容易地添加,只需使用PSIAlt解决方案中的try/catch块):
由于使用了vector,它看起来很笨拙,但它保留了swift的defer行为,其中函数的调用顺序相反:
但它比defer更强大一点,因为您可以在任何低于您自己的范围内添加延迟调用。您只需注意,当您使用此方法时,捕获的lambda不会超出范围(有点缺陷,但如果您小心的话,这不是一个严重的缺陷)。 我通常不会使用这个,除非它是一次性声明。理想情况下,您可以将任何资源包装在一个新类周围,当它超出范围时释放它,但是如果它的顶级代码包含大量资源和错误处理,那么从代码可读性的角度来看,defer确实更有意义。你不必记住一堆新的类,它们都做同样的事情。 |
|
|
5
0
在新标准出台之前,我使用简单的RAII类:
以后它可以用于任何事情,例如:
此外,您可以使用Boost。ScopeExit和类似的实现。 |
|
|
6
0
这是我的延迟实现,但没有例外保证,我仍然认为它不是很好的实现。 使用方式如下:
实施:
|
|
|
7
0
libgolang 提供 推迟 实施( commit 1 , 2 , 3 ). 用法如下:
|
|
|
8
0
我们不应该使用 std::函数 在这里,创建std::函数的对象相当缓慢。 Here 是C++11中使用lambda而不是std::函数的一个实现。编译器将内联lambda,我们将获得最佳性能。
我们可以这样使用:
|
|
|
9
-1
使用方式如下:
我的实现(请自己添加头文件):
|
|
|
Julia · 矢量中相加为总和S的值的数量 3 年前 |
|
|
C_Rod · 在模板方法中确定STL容器中项目的数据类型 4 年前 |
|
|
quantumwell · 将空向量放入std::map() 8 年前 |
|
|
OutOfBound · 对未初始化内存使用算法的优点 8 年前 |
|
|
DarthRubik · 在使用列表删除之后,迭代器如何不无效 8 年前 |