我想要實現使用Unicode例外只有頭級的,我已經開始用下面的代碼:Unicode的異常類
#pragma once
#include <string>
#include <exception>
using namespace std;
class uexception : public exception
{
public:
explicit uexception(const wchar_t* msg)
{
this->msg = msg;
}
explicit uexception(const wstring& msg)
{
this->msg = msg;
}
const wchar_t* uwhat() const throw()
{
return msg.c_str();
}
private:
wstring msg;
const char* what() const throw() //hidden
{
return NULL;
}
};
這工作得很好,但我有一些問題:
- 爲什麼我需要從std :: exception類派生?可能這完全不需要?
- 我錯過了我的課程實施?
有輕微的警告(以及相關的第二個問題) :在Windows上,'wchar_t'只有16位。如果內部編碼爲UTF-8,請使用簡單的'char';如果您在內部使用UTF-32,請使用'char32_t'。見例如[此字符類型參考](http://en.cppreference.com/w/cpp/language/types%23Character_types#Character_types)以獲取更多信息。 –
關於你的第一個問題:不,你不需要從['std :: exception'](http://en.cppreference)派生。com/w/cpp/error/exception),但是如果你不這樣做,那麼捕獲'std:exception'的程序將不會捕獲你的異常,並且需要爲你的庫添加特殊情況。哦,順便說一下,如果你想用你的「Unicode意識到」異常來交換標準異常,不要忘記重新實現整個現有的異常層次。 –
最後,這個異常庫真的需要*嗎?許多編譯器會很樂意接受UTF-8字符串文字,這意味着您在正常的標準例外中已經可以擁有Unicode。 –