J'ai couru dans le compilateur cassé, ce qui ne permet pas aux exceptions d'hériter de std::exception
(nvcc 3.0).Exceptions personnalisées C++
Nous avons donc dû créer solution de contournement:
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) {}
};
est là quelque chose que je vais perdre en ne héritant d'exception, au lieu fournissant casting? est ce qui est nécessaire dans le cas ci-dessus?
merci
Pourquoi ne vous laisse-t-il pas en hériter? (Erreurs?) Peut-être que nous pouvons pirater autour de lui et permettre l'héritage, ou est-ce strictement une chose "simplement impossible"? – GManNickG
De quelle manière ne permet-il pas de dériver de 'std :: exception'? BTW, il est probablement préférable d'hériter de l'un des types '' ('std :: exception' n'a même pas de constructeur utile). - Votre solution de contournement semble également souffrir d'une manière très discutable de stocker la chaîne - êtes-vous sûr que le pointeur pourrait ne pas devenir invalide dans le cas d'une chaîne locale? –
UncleBens
@GMan Je reçois une erreur «appel externe à exception». Ce qui n'a aucun sens car c'est une erreur spécifique à la fonction du périphérique. Cela n'affecte que lorsque vous essayez d'initialiser un objet complexe dans le constructeur. Je suis assez sûr que c'est un bug du compilateur, le compilateur précédent (nvcc 2.x) n'avait aucun problème – Anycorn