C++ C++;自定义例外
我遇到了坏编译器,它不允许异常从C++ C++;自定义例外,c++,exception,cuda,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() con
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) {}
};
如果不从exception继承,而是提供cast,我会失去什么吗?在上述情况下有什么必要
谢谢catch(std::exception)
不会捕获您的异常,您也不能将您的异常dynamic\u cast
转换为std::exception
。如果你的程序从来没有做过这两件事,你就没事了
就我个人而言,我不会使用这么坏的编译器。您应该升级到CUDA 3.1。如果您试图在设备上创建从std::exception派生的某个实例,它将无法工作,因为需要调用std::exception构造函数,而这不是设备函数
扔掉和抓住你自己的类型可能是解决办法。由于它可能永远不会返回到主机代码中,尽管(C++并没有真正处理并行抛出多个异常),与std::exception的兼容性不应该是一个太大的问题。为什么它不允许您继承它?(错误?)?顺便说一句,从
类型之一继承可能更好(std::exception
甚至没有有用的构造函数)您的解决方案似乎还存在一种非常可疑的字符串存储方式—您确定指针在本地字符串的情况下不会变得无效吗?@GMan I get外部调用异常
错误。这没有任何意义,因为这是设备功能特定的错误。这只会影响您尝试在构造函数中初始化复杂对象时。我很确定这是编译器错误,以前的编译器(NVCC2.x)没有problem@UncleBens我知道,不幸的是,在使用字符串或继承stdexcept中的任何内容时也会出现同样的问题。您应该升级到3.1。在防御中,CUDA C是C++的一个子集,并且一直在添加其他C++特性。话虽如此,所讨论的代码正在传递给主机编译器,因此它应该可以工作。