昨天,我为需要返回一个值的问题提出了一系列API可能性,但同时也指出了缺少值的情况,并能够解释原因。其中,a";包装纸";周围有一根绳子,看起来像";结果<;字符串>", 那些支架看起来很疼。还有一种可能性是";结果字符串";,但是没有';这难道不能为大量代码复制打开大门吗?
那';这是关于一年前我自己的项目。我想要结果行为,但没有';我不想到处处理模板和括号,也不想在幕后处理代码的重复。尽管如此,在一些混乱之后,我提出了一个只适用于字符串的概念证明,并开始将代码的一些部分转换为它。由于出于维护目的,事情会得到一些关注,因此它们';我会从另一种方式转变成这种风格。
在这件事存在了一段时间之后,把这些东西放在适当的位置上的那种普遍的快乐感觉变得具有感染力。我希望它也能覆盖其他东西。我希望它能处理一些比字符串更复杂的东西,所以决定尝试一下与模板有关的元编程技巧。
最终发生的是现在';s a";结果模板。h";定义了";结果34例;它可以包裹在另一种类型上,所以你得到";结果<;字符串>" 或";结果<;向量<;字符串>>" 或者别的什么。但是,我想将代码的其余部分与所有这些该死的括号隔离开来,所以每当创建这样的类型时,它都会得到自己的小头文件。
现在是resultstr。h包括结果模板。h(和<;string>;,自然地),然后就是";typedef ResultT<;std::string>;结果TR". 那';就这样。
结果16包装uint16。结果64包装uint64。结果ECSTR包装std::vector<;std::string>;。它们都有相同的键行为:必须将它们初始化为值或错误,然后在尝试使用该值之前必须检查它们。
结果TR反馈=发布。GetVar(";反馈";);如果(!feedback()){//调用抛出HTTP 400错误的东西,返回false;}if(feedback.value()。长度()>;kMaxStrLen){//在这里也抛出一个HTTP/400返回false;}
如果没有对feedback()的调用,以后对value()的调用将中止程序。这意味着它';这很难发布做错事的代码,因为它永远不会真正工作。你';d必须发送仅编译而没有编译的代码';不要跑。我的意思是,当然,人们会做那种事,但是有';只有这么多我';我的目标是解决这个问题。
这里还有一些类似的内容:只有在进行了检查之后才允许调用error()*让它表明有问题。如果有';没问题,你打电话来。error(),它';我将中止程序。同样,如果出现错误,您可以调用。value(),它';我也会中止程序。
作为来电者,你必须检查是否成功,否则你可以';别再打别的电话了。如果你';我们不会检查,你能做的就是扔掉它。
如果你得到一个成功的结果,那么你可以打电话。value()。但是,如果你打电话。错误(),它将终止您的程序。
如果返回错误结果,则可以调用。错误()。如果你打电话。在同一个对象上使用value(),它将终止程序。
是的,它';一个邪恶的人可能会写一些东西,丢掉支票的价值,然后继续使用。直接使用value(),比如";如果他们没有';我不想处理它;,或";这会让代码变得凌乱;。我想,如果在职业生涯中遇到这种结果方案,在我之前的一部故事中担任主角的一些人中,这种情况会变得很常见。
我个人认为我';d治疗";故意扔掉安全装置";就像我';d.对待故意为了自身利益而堵塞防火门的员工。我不';我不认为他们';换言之,我会做很长时间的员工。
总之,这是一种#34;春季大扫除#34;我';我最近一直在做这件事。它';这是一个很好的概念,我从阅读有关其他编程语言的文章中了解到的,我鼓励其他人对此进行解释。您可能会喜欢它对代码的影响。