Я хотел написать unicode версию std :: exception и std :: runtime_error.
Итак, я подумал, что лучше сделать, чтобы просто реализовать реализации из стандартной библиотеки C++ и изменить их для поддержки unicode.Visual C++ Standard Library keywords
Так что я задрал исключение и stdexcept заголовков в Visual C++, скопированный код, сделал свои изменения.
Дело в том, что я не мог получить ссылку, если не удалю _CRTIMP_PURE
. Я также удалил префикс _EXCEPTION_INLINE __CLR_OR_THIS_CALL
от всех функций-членов.
Это работает, но мне очень любопытно, что все это делало.
_EXCEPTION_INLINE
он буквально определен прямо над ним как #define _EXCEPTION_INLINE
, и мои навыки в поисковых системах не могут найти никакой документации о том, что они делают.
Итак, кто-нибудь знает, что они предназначены? И почему это не связано, пока я не удалю префикс _CRTIMP_PURE
из класса?
Когда вы говорите «unicode», я думаю, что вы на самом деле имеете в виду «UTF-16», потому что 'char *' и 'std :: string' отлично подходят для UTF-8, который также является юникодом и превосходит к UTF-16. –
Вы как минимум переименовали 'std :: exception' и' std :: runtime_error' после того, как скопировали и изменили их? Наличие класса взломанной библиотеки, сосуществующего с предоставленным компилятором, похоже на рецепт катастрофы. –
@BenjaminLindley: Unicode всегда кодировался как UTF-16 в Windows, поэтому я думаю, что * Unicode * и * UTF-16 * используются взаимозаменяемо на территории Microsoft. –