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++特性。话虽如此,所讨论的代码正在传递给主机编译器,因此它应该可以工作。