C ++ пользовательские исключения - PullRequest
0 голосов
/ 16 июля 2010

Я столкнулся с неработающим компилятором, который не позволяет исключениям наследоваться от 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 ]

2 голосов
/ 16 июля 2010

catch (std::exception) не поймает ваше исключение, и вы не можете dynamic_cast ваше исключение до std::exception. Если ваша программа никогда не делает ни одной из этих вещей, вы в порядке.

Лично я бы не использовал этот сломанный компилятор.

0 голосов
/ 27 июля 2010

Если вы пытаетесь создать на устройстве экземпляр чего-то, полученного из std :: exception, это не сработает, потому что нужно вызвать конструктор std :: exception, а это не функция устройства.

Бросить и поймать свой собственный тип, вероятно, является решением.Поскольку, вероятно, он никогда не вернется к хост-коду (хотя C ++ на самом деле не обрабатывает одновременное создание нескольких исключений), совместимость с std :: exception не должна быть слишком большой проблемой.

0 голосов
/ 20 июля 2010

Вам следует перейти на CUDA 3.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...