C ++自定义异常

时间:2010-07-16 19:28:16

标签: c++ exception cuda

我遇到了破坏的编译器,它不允许从std::exception(nvcc 3.0)继承异常。

因此必须创建解决方法:

struct exception {
    explicit exception(const char* message) {
        what_ = message;
    }
    virtual const char *what() const throw() { return what_; }
    operator std::exception() const {
        return std::runtime_error(what_);
    }
private:
    const char* what_;
};

struct configuration_error : exception {
    configuration_error(const char* message)
        : exception(message) {}
};

我是否会因为没有从异常继承而丢失,而是提供演员?在上述情况下是必要的吗?

谢谢

3 个答案:

答案 0 :(得分:2)

catch (std::exception)无法捕获您的例外情况,您也不能dynamic_cast std::exception例外{{1}}。如果你的程序从未做过这些事情,你就可以了。

但我个人不会使用这个破坏的编译器。

答案 1 :(得分:0)

您应该升级到CUDA 3.1。

答案 2 :(得分:0)

如果你试图在设备上创建一个从std :: exception派生的东西的实例,它将无法工作,因为需要调用std :: exception构造函数,而这不是一个设备函数。

投掷和捕捉自己的类型可能是解决方案。因为它可能永远不会让它回到主机代码,但是(C ++并没有真正处理并行抛出多个异常),与std :: exception的兼容性不应该是一个太大的问题。