Tôi đã xoay sở để vượt qua sự nghiệp lập trình C++ cho đến nay hầu như không bao giờ chạm vào ngoại lệ nhưng gần đây tôi đã làm việc trên một dự án với động cơ Ogre và tôi đang cố học đúng cách. Tôi đã tìm thấy rất nhiều câu hỏi và câu trả lời tốt ở đây về việc sử dụng chung của ngoại lệ C++ nhưng tôi muốn nhận được một số ý kiến bên ngoài từ đây về việc sử dụng Ogre là tốt và cách tốt nhất để làm việc với họ.Việc sử dụng ngoại lệ của Ogre có phải là cách tốt để sử dụng chúng không?
Để bắt đầu, trích dẫn từ tài liệu của lớp Exception riêng của nó Ogre của:
OGRE không bao giờ sử dụng giá trị trả lại để chỉ ra sai sót. Thay vào đó, nếu một lỗi xảy ra, một ngoại lệ được ném ra, và đây là đối tượng đóng gói chi tiết của vấn đề. Ứng dụng sử dụng OGRE nên luôn luôn đảm bảo rằng các ngoại lệ bị bắt, vì vậy tất cả các chức năng của OGRE phải xuất hiện trong khối try {} catch (Ogre :: Exception & e) {}.
Thật sao? Mỗi hàm Ogre đơn lẻ có thể ném một ngoại lệ và được bao bọc trong khối try/catch? Hiện nay điều này được xử lý trong việc sử dụng nó bằng cách thử/nắm bắt trong chính sẽ hiển thị một hộp thông báo với mô tả ngoại lệ trước khi thoát. Điều này có thể hơi khó xử khi gỡ lỗi mặc dù bạn không nhận được dấu vết ngăn xếp, chỉ là hàm đã ném lỗi - quan trọng hơn là hàm từ mã của chúng tôi gọi là hàm Ogre. Nếu nó là một khẳng định trong mã Ogre thì nó sẽ đi thẳng vào mã trong trình gỡ lỗi và tôi có thể tìm hiểu điều gì đang diễn ra dễ dàng hơn nhiều - tôi không biết nếu tôi thiếu một thứ gì đó sẽ cho phép tôi gỡ lỗi ngoại lệ đã?
Tôi đang bắt đầu thêm một số khối try/catch khác trong mã của chúng tôi ngay bây giờ, thường nghĩ về việc liệu nó có quan trọng không nếu chức năng Ogre ném một ngoại lệ. Nếu nó là cái gì đó sẽ ngừng tất cả mọi thứ làm việc sau đó để cho các thử chính/bắt xử lý nó và thoát khỏi chương trình. Nếu nó không phải là rất quan trọng sau đó bắt nó chỉ sau khi cuộc gọi chức năng và để cho chương trình tiếp tục. Một ví dụ gần đây về việc này là xây dựng một vectơ của các tham số chương trình đỉnh/mảnh cho vật liệu được áp dụng cho thực thể - nếu vật liệu không có bất kỳ tham số nào thì nó sẽ ném một ngoại lệ, mà tôi bị bắt và bỏ qua vì nó đã không ' t cần phải thêm vào danh sách các tham số của tôi. Điều này có vẻ giống như một cách hợp lý để đối phó với mọi thứ? Bất kỳ lời khuyên cụ thể để làm việc với Ogre được đánh giá cao.
+1 cho "Bất cứ nơi nào bạn có thể đối phó có ý nghĩa với ngoại lệ" – Yacoby
Vì vậy, có ý nghĩa đối phó với ngoại lệ sẽ áp dụng cho ví dụ tìm kiếm thông số cuối cùng của tôi? Miễn là không có gì đã được sửa đổi trước khi ngoại lệ thì nó sẽ không gây ra bất kỳ vấn đề nào. ngày giờ chỉ ra cách gỡ lỗi ngoại lệ khi chúng được ném ra sẽ giúp ích rất nhiều, nếu tôi lấy thử/nắm bắt chính ở chế độ gỡ lỗi, điều gì sẽ xảy ra nếu ngoại lệ không bị bắt? – identitycrisisuk
Khi ngoại lệ không bị bắt, trình gỡ lỗi sẽ bắt được trình gỡ lỗi và hiển thị cho bạn điểm mà nó được ném ra. – Christopher