Я столкнулся с разбитым компилятором, который не позволяет исключениям наследовать от std::exception
(nvcc 3.0).C++ пользовательские исключения
поэтому пришлось создать обходной путь:
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) {}
};
там что-то я буду терять, не унаследовав от исключения, вместо предоставления актеров? что необходимо в вышеуказанном случае?
спасибо
Почему он не позволяет вам унаследовать его? (Ошибки?) Возможно, мы можем взломать его и включить наследование, или это просто просто «просто не может»? – GManNickG
Каким образом это не позволяет получать из 'std :: exception'? BTW, вероятно, лучше наследовать один из типов '' ('std :: exception' даже не имеет полезного конструктора). - Кажется, что ваш обходной путь страдает от очень сомнительного способа хранения строки - уверены ли вы, что указатель может не стать недействительным в случае локальной строки? –
UncleBens
@GMan Я получаю ошибку 'external call to exception '. Это не имеет никакого смысла, поскольку это ошибка конкретной функции устройства. Это влияет только на попытку инициализации сложного объекта в конструкторе. Я уверен, что это ошибка компилятора, предыдущий компилятор (nvcc 2.x) не имел проблем – Anycorn