На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (3) 1 2 [3]  все  ( Перейти к последнему сообщению )  
> case ругается на поле static const
    Цитата Олег М @
    А не проще сделать, чтоб твои функции, вместо того чтоб возвращать код ошибки выдавали exception? Тогда все эти проблемы просто не возникнут

    Олег, ты о чём? Причём тут код ошибки или исключения? Я писал о constexpr, ошибках компиляции и ошибках линковки.
    Вообще, очень интересно, с чего ты взял, что мои функции возвращают коды ошибок? Может быть, ты меня с кем-то перепутал?
    Сообщение отредактировано: Eric-S -
      Не знаю. Просто немного потерял нить – зачем это все вообще нужно?
        Цитата Олег М @
        Не знаю. Просто немного потерял нить – зачем это все вообще нужно?

        Сейчас сделал три разных enum.

        Два из enum используются в качестве битовых флагов, для конфигурирования. Примерно так:
        ExpandedWrap disabled
          enum class config { none = 0x0000, alpha = 0x0010, beta = 0x0020, ... };
           
          someclass obj0( config::nothing );
          someclass obj1( config::alpha | config::beta );


        Для них я перегрузил побитовые операторы.

        Третий enum используется в нескольких разных местах. В нём лежат идентификаторы.
        ExpandedWrap disabled
          enum class msg_category{ first = 0x0000, second = 0x0001, ... };


        1. для конфигурирования.
        ExpandedWrap disabled
          message_handler_guard mhg( msg_category::first, &funcname_proc );


        2. для отправки сообщений.
        ExpandedWrap disabled
          dispatch::send( msg_category::first, "hello, world!" );


        3. для приёма сообщений
        ExpandedWrap disabled
          void funcname_proc( int id, char* message )
          {
          switch( static_cast< msg_category >( id ) )
          {
           
          case msg_category::first:
          cout << message << endl;
          break;
           
          default:
          throw invalid_message( id );
           
          }
          }


        У меня только простые классы-обёртки, поверх библиотечных функций.
        Библиотека использует свои идентификаторы.
        Переделывать библиотеку не могу и не хочу.
        Но в итоге, приходится обходится именно с теми константами, которые использует библиотека.
        Иначе, если придумаю свои константы, библиотека не поймёт пользователя, который работает через мою обёртку, а пользователь не поймёт библиотеку.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:
        Страницы: (3) 1 2 [3]  все


        Рейтинг@Mail.ru
        [ Script execution time: 0,0237 ]   [ 17 queries used ]   [ Generated: 29.03.24, 10:11 GMT ]