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);
}
chương trình rõ ràng là sai này (kể từ khi mẫu tham số là khác nhau) bị treo vớiLàm thế nào để gỡ lỗi một std :: ngoại lệ bad_cast
terminate called after throwing an instance of 'std::bad_cast'
what(): std::bad_cast
Aborted (core dumped)
Có cách nào làm thế nào để có được chẩn đoán chính xác về những gì đã xảy ra, ngoài thông báo lỗi thời gian chạy? Cái gì đó, có thể chỉ ra lỗi int/float cho tôi? Tôi đang tìm kiếm một thông báo lỗi mô tả như
const GA1DArrayGenome<float> &
không thể được đúc đểconst GA1DArrayGenome<int> &
Thậm chí tốt hơn, vì C++ loại có thể có được lông vào những thời điểm, công cụ này có thể nhận thấy sự khác biệt chính xác trong các mẫu tham số .
Đây là một tác dụng phụ đáng tiếc của 'ngoại lệ std': bằng cách cố gắng để tránh phân bổ bộ nhớ thông điệp của họ là gần như vô ích, và rằng họ không có một dấu vết ngăn xếp nó là không thể biết được nơi họ đến từ một posteriori. Mặt khác, chúng có trọng lượng nhẹ ... –