我遇到了破坏的编译器,它不允许从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) {}
};
我是否会因为没有从异常继承而丢失,而是提供演员?在上述情况下是必要的吗?
谢谢
答案 0 :(得分:2)
catch (std::exception)
无法捕获您的例外情况,您也不能dynamic_cast
std::exception
例外{{1}}。如果你的程序从未做过这些事情,你就可以了。
但我个人不会使用这个破坏的编译器。
答案 1 :(得分:0)
您应该升级到CUDA 3.1。
答案 2 :(得分:0)
如果你试图在设备上创建一个从std :: exception派生的东西的实例,它将无法工作,因为需要调用std :: exception构造函数,而这不是一个设备函数。
投掷和捕捉自己的类型可能是解决方案。因为它可能永远不会让它回到主机代码,但是(C ++并没有真正处理并行抛出多个异常),与std :: exception的兼容性不应该是一个太大的问题。