Имеется ли в стандартной библиотеке С++ исключение, эквивалентное .NET NotImplementedException?
Если нет, каковы наилучшие методы обработки неполных методов, которые я намерен завершить позже?
Имеется ли в стандартной библиотеке С++ исключение, эквивалентное .NET NotImplementedException?
Если нет, каковы наилучшие методы обработки неполных методов, которые я намерен завершить позже?
Вы можете наследовать от std:: logic_error и определить ваше сообщение об ошибке следующим образом:
class NotImplementedException : public std::logic_error
{
public:
virtual char const * what() const { return "Function not yet implemented."; }
};
Я думаю, что делать это таким образом делает улавливание исключения более явным, если это действительно возможность. Ссылка на std:: logic_error: http://www.cplusplus.com/reference/stdexcept/logic_error/
В духе @dustyrockpyle я наследую от std::logic_error
, но я использую этот конструктор строковых классов, вместо того, чтобы переопределять what()
class NotImplemented : public std::logic_error
{
public:
NotImplemented() : std::logic_error("Function not yet implemented") { };
};
Так как это всего лишь временное исключение, которое не имеет никакого значения для приложения, вы можете просто выбросить char const *:
int myFunction(double d) {
throw "myFunction is not implemented yet.";
}
Хорошей практикой было бы для вашего приложения определять свой собственный набор исключений, в том числе один для нереализованного метода, если это необходимо. Убедитесь, что вы наследуете свой тип исключения из std:: exception, чтобы вызывающие функции исключения метаданных могли поймать ошибку в едином виде.
Один из возможных способов реализации исключения 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;
};
Вот мой вариант этого, который покажет имя функции и ваше собственное сообщение.
class NotImplemented : public std::logic_error
{
private:
std::string _text;
NotImplemented(const char* message, const char* function)
:
std::logic_error("Not Implemented")
{
_text = message;
_text += " : ";
_text += function;
};
public:
NotImplemented()
:
NotImplemented("Not Implememented", __FUNCTION__)
{
}
NotImplemented(const char* message)
:
NotImplemented(message, __FUNCTION__)
{
}
virtual const char *what() const throw()
{
return _text.c_str();
}
};