技术文章

了解最新技术文章

当前位置:首页>技术文章>技术文章
全部 146 常见问题 7 技术文章 139

think cell博客:tc::改变

时间:2023-11-22   访问量:1035  标签: think cell,think-cell,编程

你好,

欢迎来到有关 think-cell 开发工作的博客。它主要是关于一般编程,更具体地说是关于 C++。我们的平台主要是 Windows 和 macOS,其中也有一些 Web 开发。我们会写下我们想到的任何内容、架构决策、我们发现的小智慧或对第三方软件中让我们感到沮丧的错误的抱怨。

think-cell,我们主要使用 C++ 编写,并混合了一些内部 Python 脚本。我们构建了自己的内部库,该库构建于 Boost 和 C++ 标准库之上,并努力遵循 C++ 标准库命名等约定,以便新用户很容易上手。它位于GitHub上,可以在 Boost 许可证下免费使用。

我想从一个小实用程序开始,事实证明它对我们非常有用,而且它背后的思考比乍一看明显的要多一些。

我们都知道脏标志的概念,它被设置在某个地方,指示要完成一些工作,然后在实际发生工作的其他地方进行查询和重置:

…dirty=true;…if(dirty) {
    dirty=false;
    … do work …}

很容易。不过,这里有一定程度的自由:您是在工作完成之前还是之后重置标志?您可能会倾向于稍后重置它:

…dirty=true;…if(dirty) {
    … do work …
    dirty=false;}

这似乎更具表现力:当你真正完成工作时,你只会说你已经完成了工作。但这实用吗?显然,如果在工作时不检查“忙”,那也没关系。如果查到了怎么办?特别是,在工作期间,执行工作的代码部分可能会被重新输入。如果您提前重置dirty,该工作将被跳过。如果你重设晚了,就不会了。什么更好?

…dirty=true;…if(dirty) {
    … work part 1 …    reenter_myself();
    … work part 2 …
    dirty=false;}

重新进入时,无论您重新输入执行工作的代码的频率如何,都只会完成工作的第 1 部分。在重入时重复第 1 部分最多可能没有帮助,最坏的情况会导致无限递归。在任何情况下,为了保证正确性,您必须构建工作,以便第 1 部分足以满足在重新进入代码路径内运行的代码。

如果我们接受这个推理,那么dirty尽早重置总是更好。如果第 1 部分还不够,那么代码无论如何都是不正确的。如果是这样,我们就可以避免多余的工作以及可能的无限递归。

GitHub 上提供的库中,我们将这种见解打包到一个小实用程序中,tc::change这是一个带有附加功能的分配,如果某些内容发生更改,则会返回:

…dirty=true;…if(tc::change(dirty, false)) {
    … do work …}

除了布尔标志之外,它对于其他值也很有用,因为更改它们需要一些相关工作:

if(tc::change(size, screen_size())) {
    … consequences of screen size change …}


我们用得tc::change太多了。尝试一下!


上一篇:think cell攻略:属性——隐藏线的隐藏状态

下一篇:think cell博客:始终内联单调用函数

发表评论:

评论记录:

未查询到任何数据!

免费通话

24小时免费咨询

请输入您的联系电话,座机请加区号

免费通话

微信扫一扫

微信联系
返回顶部