2014-06-28 16 views
18

Thư viện chuẩn của C++ có chứa ngoại lệ tương đương với NotImplementedException của .NET không?C++ có tương đương với NotImplementedException của .NET không?

Nếu không, các phương pháp hay nhất để xử lý các phương pháp không đầy đủ mà tôi định hoàn thành sau này là gì?

+10

Không - ném std :: ngoại lệ ("Không được triển khai") –

+1

@ DieterLücking std :: ngoại lệ có một ctor chuỗi? – nurettin

+1

@nurettin đúng, nó không có - std :: logic_error có thể là thích hợp –

Trả lời

21

Bạn có thể kế thừa từ std :: logic_error, và xác định thông báo lỗi của bạn mà cách:

class NotImplementedException : public std::logic_error 
{ 
public: 
    virtual char const * what() const { return "Function not yet implemented."; } 
}; 

Tôi nghĩ làm theo cách này sẽ làm cho trường hợp ngoại lệ rõ ràng hơn nếu đó thực sự là một khả năng. Tham chiếu đến tiêu chuẩn :: logic_error: http://www.cplusplus.com/reference/stdexcept/logic_error/

3

Vì đây chỉ là một ngoại lệ tạm thời mà không mang bất kỳ ý nghĩa ứng dụng, bạn chỉ có thể ném một const char *:

int myFunction(double d) { 
    throw "myFunction is not implemented yet."; 
} 
+11

Tôi nghĩ rằng bất kỳ ngoại lệ nào không bắt nguồn từ std :: exception là ác (ngoại lệ có thể áp dụng) –

+1

@ DieterLücking Có phải là "ngoại lệ" cuối cùng không? : p Tôi đồng ý với bạn, nhưng tôi nghĩ đây là một trong những trường hợp đặc biệt. Một "ngoại lệ" như vậy không phải là ngoại lệ thực sự, chỉ là một cách để chấm dứt chương trình ngay khi hàm chưa thực hiện được gọi. Tôi sẽ không tạo ra một lớp học chính thức cho điều đó. – Quentin

+0

Là 'ném std :: exception (" myFunction chưa được thực hiện. ")' An toàn hơn? – becko

3

Thực tiễn tốt sẽ là để ứng dụng của bạn xác định bộ ngoại lệ của riêng mình, bao gồm cả một phương pháp chưa thực hiện, nếu cần. Hãy chắc chắn rằng bạn kế thừa loại ngoại lệ của bạn từ std::exception để người gọi của các chức năng ném ngoại lệ có thể bắt lỗi theo cách thống nhất.

Chỉ cần tìm ra cách thức để thực hiện một NotImplementedException :

class NotImplementedException 
    : public std::exception { 

public: 

    // Construct with given error message: 
    NotImplementedException(const char * error = "Functionality not yet implemented!") 
    { 
     errorMessage = error; 
    } 

    // Provided for compatibility with std::exception. 
    const char * what() const noexcept 
    { 
     return errorMessage.c_str(); 
    } 

private: 

    std::string errorMessage; 
}; 
23

Với tinh thần @dustyrockpyle, tôi kế thừa từ std::logic_error nhưng tôi sử dụng constructor chuỗi của lớp đó, chứ không phải là trọng what()

class NotImplemented : public std::logic_error 
{ 
public: 
    NotImplemented() : std::logic_error("Function not yet implemented") { }; 
}; 
+0

yep! đơn giản hơn thanh lịch! – Uduse

Các vấn đề liên quan