多平台统一管理软件接口,如何实现多平台统一管理软件接口
338
2022-11-05
d的异常2
原文 添加环境信息到可能无法访问传播异常的抛代码中. 是的,但可再次这样:抓一个,然后抛新的,并把旧的放在后面. 是的.但是,必须在每个可能想要添加环境信息的潜在抽象级别周围插入try/catch语法很痛苦.如果在战略入口点,用可插入的包装器,就更好了.如下?
// 幻想的,假设的语法auto myFunc(Args...)(Args args) { int additionalInfo = 123; scope(failure, additionalInfo); return runUnreliableOperation(args);}
域共享析构器,可以这样:
struct AdditionalInfo { static string[] info; this(string info) { AdditionalInfo.info ~= info; } ~this() { AdditionalInfo.info = AdditionalInfo.info[0 .. $ - 1]; } @disable this(this);}class AdditionalInfoException : Exception { this(string t) { import std.string; super(t ~ "\n" ~ AdditionalInfo.info.join(" ")); }}void bar() { with(AdditionalInfo("zone 1")) { with(AdditionalInfo("zone 2")) { } throw new AdditionalInfoException("info"); }}void main() { bar();}
抛出点需要与之合作,但仍然可以试/抓整个操作,并附加原始异常到新异常中.最大的问题仍然是串类型,呃. 通过编译器,可在异常处理的元数据中附加函数级别信息,因此就像生成栈跟踪一样查找它.但仅限于函数级.但是,有嵌套函数.
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~