Как сгенерировать сообщение об ошибке с аргументом? - PullRequest
0 голосов
/ 30 октября 2018

Я действительно борюсь с сообщением об ошибке, содержащим аргумент из функции. Я знаю, что могу сделать:

throw std::out_of_range("Empty tree");

С чем я борюсь, это еще одна ошибка, которую я должен выбросить, а именно:

"Cannot find ceil for key <key>" 

Как вы видите, я должен включить ключ, для которого не могу найти планку. У меня есть ключ в качестве переменной в функции, из которой я выкидываю исключение, но я понятия не имею, как включить его в то, что в конечном итоге будет напечатано e.what ().

РЕДАКТИРОВАТЬ: Это шаблонная функция в качестве члена класса, поэтому ключ просто введите T прямо сейчас. Поэтому я думаю, что форматирование как строки c не работает.

1 Ответ

0 голосов
/ 01 ноября 2018

Стандартные исключения принимают в качестве аргумента только строку:

например. out_of_range , см. apache.org docs

namespace std {
  class out_of_range : public logic_error {
  public:
    explicit out_of_range(const string&  what_arg);
  };
}

Вы можете использовать любой метод для предварительного построения строки, а затем передать ее в качестве параметра в исключение.

Пример

#include <string>
#include <sstream>
#include <stdexcept>

std::ostringstream oss;
oss << "Cannot find ceil for key " << key;
std::string errorString = oss.str();

throw std::out_of_range(errorString);

Другие способы создания строки см. В C ++ create string из текста и переменных

...