我有一个API,内部有一些错误报告的例外.基本结构是它有一个从std :: exception继承的根异常对象,然后它将抛出它的一些子类.
捕获在一个库或线程中抛出的异常并将其捕获到另一个库或线程中会导致未定义的行为(至少Qt抱怨它并且在许多情况下不允许它).我想将库调用包装在将返回状态代码的函数中,如果发生异常,则将异常对象的副本包装起来.
存储异常(具有多态行为)供以后使用的最佳方法是什么?我相信c 0x future API会使用类似的东西.那么最好的方法是什么?
我能想到的最好的方法是在每个异常类中都有一个clone()方法,它将返回一个指向同一类型异常的指针.但这不是很通用,根本不涉及标准异常.
有什么想法吗?
编辑:似乎c 0x将有a mechanism for this.它被描述为“库魔术”.这是否意味着不需要c 0x的任何语言功能?如果没有,是否有任何与c 03兼容的实现?
编辑:看起来像有一个implementation of exception copying.我将保持问题开放任何非boost :: copy_exception答案.
编辑:解决j_random_hacker关于异常的根本原因的问题是内存不足错误.对于这个特定的库和一组例外,情况并非如此.从根异常对象派生的所有异常表示由无效用户输入引起的不同类型的解析错误.与内存相关的异常只会导致抛出std :: bad_alloc,它将单独解决.