From 5035f18f44f675af2faa4019b6de14b3f3aab270 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sun, 31 Aug 2025 22:15:17 +0800 Subject: Use utf8 message in cru::Exception. --- include/cru/base/Exception.h | 15 ++++++++++----- src/base/Exception.cpp | 15 +++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/include/cru/base/Exception.h b/include/cru/base/Exception.h index b299acc4..d102c263 100644 --- a/include/cru/base/Exception.h +++ b/include/cru/base/Exception.h @@ -10,27 +10,32 @@ namespace cru { #endif class CRU_BASE_API Exception : public std::exception { public: - explicit Exception(String message = {}, + explicit Exception(std::string message = "", + std::unique_ptr inner = nullptr); + explicit Exception(StringView message, std::unique_ptr inner = nullptr); ~Exception() override; public: - String GetMessage() const { return message_; } + [[deprecated("Use GetUtf8Message.")]] String GetMessage() const { + return String::FromUtf8(message_); + } + + std::string GetUtf8Message() const { return this->message_; } std::exception* GetInner() const noexcept { return inner_.get(); } const char* what() const noexcept override; protected: - void SetMessage(String message) { message_ = std::move(message); } + void SetMessage(StringView message) { message_ = message.ToUtf8(); } void AppendMessage(StringView additional_message); void AppendMessage(std::optional additional_message); private: - String message_; - mutable std::string utf8_message_; + std::string message_; std::unique_ptr inner_; }; diff --git a/src/base/Exception.cpp b/src/base/Exception.cpp index 19938970..1e3813a9 100644 --- a/src/base/Exception.cpp +++ b/src/base/Exception.cpp @@ -5,22 +5,21 @@ #include namespace cru { -Exception::Exception(String message, std::unique_ptr inner) +Exception::Exception(std::string message, std::unique_ptr inner) : message_(std::move(message)), inner_(std::move(inner)) {} +Exception::Exception(StringView message, std::unique_ptr inner) + : message_(message.ToUtf8()), inner_(std::move(inner)) {} + Exception::~Exception() {} const char* Exception::what() const noexcept { - if (!message_.empty() && utf8_message_.empty()) { - utf8_message_ = message_.ToUtf8(); - } - - return utf8_message_.c_str(); + return message_.c_str(); } void Exception::AppendMessage(StringView additional_message) { - message_ += u" "; - message_ += additional_message; + message_ += " "; + message_ += additional_message.ToUtf8(); } void Exception::AppendMessage(std::optional additional_message) { -- cgit v1.2.3