Я действительно борюсь с выдачей сообщения об ошибке, которое включает аргумент из функции. Я знаю, что могу:
throw std::out_of_range("Empty tree");
Я борюсь с другой ошибкой, которую я должен выдать, а именно:
"Cannot find ceil for key <key>"
Как видите, я должен включить ключ, для которого я не могу найти потолок. У меня есть ключ как переменная в функции, из которой я генерирую исключение, но я не знаю, как включить его в то, что в конечном итоге будет напечатано e.what ().
Обновлено: это функция шаблона как член класса, поэтому сейчас ключ просто типа T. Поэтому я думаю, что форматирование его как строки c не работает.
Используйте std::string
для создания сообщения.
Вам понадобится какая-то функция stringify
, которая преобразует все, что есть T
, в std::string
. Тогда вы можете использовать его как throw std::out_of_range("Cannot find ceil for key " + stringify(key));
Вам нужно уточнить, что такое объект key
. Пожалуйста, опубликуйте код для этого.
Стандартные исключения принимают в качестве аргумента только строку:
например вне зоны доступа, см. документы apache.org
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++ создает строку текста и переменных.
Что это за тип
key
?