【发布时间】:2020-03-27 16:28:38
【问题描述】:
我有一个特殊的类用作方法的返回类型,包含所需的值,或者在失败的情况下,甚至会从早期的错误中级联错误消息。它按预期工作。
由于返回的类型不同,我喜欢使用关键字 auto。但是当使用很多方法时,我必须创建新的返回变量。
代码的典型部分如下所示:
auto ret1 = methodA();
if(ret1.isValid()...
auto ret2 = methodB();
if(ret2.isValid()...
我不喜欢总是创建一个新变量。但我喜欢优雅的错误处理方式。使用更多的转储返回类型(如整数中的错误代码)可以解决问题,但我无法从错误处理返回类型中受益。
重用第一个返回变量ret1有什么技巧吗?
【问题讨论】:
-
它们是同一类型吗?如果是,则只需
ret1 = methodB(),如果否,则否,因为ret1已经有一个类型。 -
auto只是实际类型的替代品,其背后并没有更多的魔力。因此,如果methodA和methodB返回不同的东西,答案是否定的。换句话说,您可以将auto替换为实际类型,您的问题仍然是一样的 -
您可以让
isValid获取一个可调用对象,该可调用对象仅在值有效时才被调用。然后你根本不需要存储返回值。如果合适,很大程度上取决于您的用例。 Lambda 使传递内联可调用对象变得非常容易和可读。 -
你为什么不喜欢总是创建一个新变量?你的物体很大吗?