class GAGenome {
virtual void method(){};
};
template <class T>
class GAArray {
};
template <class T>
class GA1DArrayGenome : public GAArray<T>, public GAGenome {
};
int main() {
GA1DArrayGenome<float> genome;
const GAGenome & reference = genome;
auto cast = dynamic_cast<const GA1DArrayGenome<int> &>(reference);
}
To oczywiście źle programu (ponieważ parametr szablonu jest inny) wywala zJak debugować wyjątek std :: bad_cast
terminate called after throwing an instance of 'std::bad_cast'
what(): std::bad_cast
Aborted (core dumped)
Czy istnieje sposób, jak uzyskać precyzyjne diagnostykę, co poszło nie tak, poza komunikat o błędzie w czasie wykonywania? Coś, co może mi wskazywać na błąd int/float? Szukam opisowy komunikat o błędzie podobny
const GA1DArrayGenome<float> &
nie mogą być oddane doconst GA1DArrayGenome<int> &
nawet lepiej, ponieważ C++ typy mogą dostać owłosione czasami narzędzie mógłby zauważyć dokładną różnicę w parametrze szablonu .
To niefortunny efekt uboczny z 'std' wyjątkami: próbując uniknąć alokacji pamięci ich wiadomości jest niemal bezużyteczne, a ponieważ nie mają śladu stosu, prawie niemożliwe jest wiedzieć, skąd pochodzą a posteriori. Z drugiej strony są lekkie ... –