了解最新技术文章
你好,
欢迎来到有关 think-cell 开发工作的博客。它主要是关于一般编程,更具体地说是关于 C++。我们的平台主要是 Windows 和 macOS,其中也有一些 Web 开发。我们会写下我们想到的任何内容、架构决策、我们发现的小智慧或对第三方软件中让我们感到沮丧的错误的抱怨。
在 think-cell,我们主要使用 C++ 编写,并混合了一些内部 Python 脚本。我们构建了自己的内部库,该库构建于 Boost 和 C++ 标准库之上,并努力遵循 C++ 标准库命名等约定,以便新用户很容易上手。它位于GitHub上,可以在 Boost 许可证下免费使用。
我想从一个小实用程序开始,事实证明它对我们非常有用,而且它背后的思考比乍一看明显的要多一些。
我们都知道脏标志的概念,它被设置在某个地方,指示要完成一些工作,然后在实际发生工作的其他地方进行查询和重置:
很容易。不过,这里有一定程度的自由:您是在工作完成之前还是之后重置标志?您可能会倾向于稍后重置它:
这似乎更具表现力:当你真正完成工作时,你只会说你已经完成了工作。但这实用吗?显然,如果在工作时不检查“忙”,那也没关系。如果查到了怎么办?特别是,在工作期间,执行工作的代码部分可能会被重新输入。如果您提前重置dirty
,该工作将被跳过。如果你重设晚了,就不会了。什么更好?
重新进入时,无论您重新输入执行工作的代码的频率如何,都只会完成工作的第 1 部分。在重入时重复第 1 部分最多可能没有帮助,最坏的情况会导致无限递归。在任何情况下,为了保证正确性,您必须构建工作,以便第 1 部分足以满足在重新进入代码路径内运行的代码。
如果我们接受这个推理,那么dirty
尽早重置总是更好。如果第 1 部分还不够,那么代码无论如何都是不正确的。如果是这样,我们就可以避免多余的工作以及可能的无限递归。
在GitHub 上提供的库中,我们将这种见解打包到一个小实用程序中,tc::change
这是一个带有附加功能的分配,如果某些内容发生更改,则会返回:
除了布尔标志之外,它对于其他值也很有用,因为更改它们需要一些相关工作:
我们用得tc::change
太多了。尝试一下!
24小时免费咨询
请输入您的联系电话,座机请加区号