Подтвердить что ты не робот

Имеет ли С++ эквивалент .NET NotImplementedException?

Имеется ли в стандартной библиотеке С++ исключение, эквивалентное .NET NotImplementedException?

Если нет, каковы наилучшие методы обработки неполных методов, которые я намерен завершить позже?

4b9b3361

Ответ 1

Вы можете наследовать от 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/

Ответ 2

В духе @dustyrockpyle я наследую от std::logic_error, но я использую этот конструктор строковых классов, вместо того, чтобы переопределять what()

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

Ответ 3

Так как это всего лишь временное исключение, которое не имеет никакого значения для приложения, вы можете просто выбросить char const *:

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

Ответ 4

Хорошей практикой было бы для вашего приложения определять свой собственный набор исключений, в том числе один для нереализованного метода, если это необходимо. Убедитесь, что вы наследуете свой тип исключения из 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;
};

Ответ 5

Вот мой вариант этого, который покажет имя функции и ваше собственное сообщение.

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();
    }
};