Доброе время суток!
Может мне кто-нибудь подскажет по следующему вопросу:
Есть у меня некая библиотека, которая долгое время назад мной написана и
прекрасно работала по сей день, но появилась необходимость(не по своей воле,
а по принуждению :-D ) сделать её кросплатформенной (Unix/Win2000/Win9x), да при
всем при этом ещё и сделать возможность сборки как UNICODE так и ANSI версии
библиотеки. В общем портировать под Unix, но ANSI я её портировал, а вот с UNICODE возникла
следующая проблема с std::exception и классами от него унаследованными, которые в этой библиотеке повсеместно используются. Мне не ясно как перевести на Unicode метод what и эти классы
вцелом из-за использования в них const char*.
// section 18.6.1
class _STLP_CLASS_DECLSPEC exception
{
public:
# ifdef _STLP_OWN_IOSTREAMS
exception() _STLP_NOTHROW;
virtual ~exception() _STLP_NOTHROW;
virtual const char* what() const _STLP_NOTHROW;
# else
exception() _STLP_NOTHROW {}
virtual ~exception() _STLP_NOTHROW {}
virtual const char* what() const _STLP_NOTHROW {return "class exception";}
# endif
};
И вообще я неочень понимаю как под Unix компилять unicode приложения и как
там устроена работа с unicode.
Ссылки на любую инфу по этой теме приветствуются
Заранее благодарен!.
Здравствуйте, __LeOn__, Вы писали:
__L>библиотеки. В общем портировать под Unix, но ANSI я её портировал, а вот с UNICODE возникла
__L>следующая проблема с std::exception и классами от него унаследованными, которые в этой библиотеке повсеместно используются. Мне не ясно как перевести на Unicode метод what и эти классы
__L>вцелом из-за использования в них const char*.
строку возвращаемую из метода what() можно использовать как ключ в ассоциативном контейнере,
например:
std::map<const char*, const wchar_t*> errorMessages;
class my_exception : public std::exception;
catch(my_exception& ex)
{
std::cerr << errorMessages[ex.what()] << std::endl;
}
проблема в том, что этот способ можно использовать только для своих классов исключений,
потому что сообщения стандартных классов исключений не стандартизированы.
Здравствуйте, __LeOn__, Вы писали:
__L>И вообще я неочень понимаю как под Unix компилять unicode приложения и как
__L>там устроена работа с unicode.
__L>Ссылки на любую инфу по этой теме приветствуются
__L>Заранее благодарен!.
Посмотри
здесьАвтор: Ed.ward
Дата: 28.03.03
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Здравствуйте, korzhik, Вы писали:
K> std::map<const char*, const wchar_t*> errorMessages;
K> class my_exception : public std::exception;
K> catch(my_exception& ex)
K> {
K> std::wcerr << errorMessages[ex.what()] << std::endl;
K> }