std::exception и UNICODE
От: __LeOn__ Россия none
Дата: 17.12.04 13:25
Оценка:
Доброе время суток!

Может мне кто-нибудь подскажет по следующему вопросу:
Есть у меня некая библиотека, которая долгое время назад мной написана и
прекрасно работала по сей день, но появилась необходимость(не по своей воле,
а по принуждению :-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.
Ссылки на любую инфу по этой теме приветствуются

Заранее благодарен!.
Re: std::exception и UNICODE
От: korzhik Россия  
Дата: 17.12.04 13:35
Оценка:
Здравствуйте, __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;
  }


проблема в том, что этот способ можно использовать только для своих классов исключений,
потому что сообщения стандартных классов исключений не стандартизированы.
Re: std::exception и UNICODE
От: NKZ  
Дата: 17.12.04 13:37
Оценка:
Здравствуйте, __LeOn__, Вы писали:

__L>И вообще я неочень понимаю как под Unix компилять unicode приложения и как

__L>там устроена работа с unicode.
__L>Ссылки на любую инфу по этой теме приветствуются

__L>Заранее благодарен!.


Посмотри здесь
Автор: Ed.ward
Дата: 28.03.03
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[2]: std::exception и UNICODE
От: korzhik Россия  
Дата: 17.12.04 13:38
Оценка:
Здравствуйте, 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>  }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.