На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Перегрузка оператора индексации
    Хочу перегрузить оператор индексации так, чтоб работало все сродни индексаторам в c#. Возможно ли это? Допустим, есть класс, у него есть член-массив, при помощи оператора индексации можно обращаться к элементам этого массива, но так, чтобы индексирование осуществлялось через строку:

    ExpandedWrap disabled
      struct struc
      {
          LPCSTR name
      }
       
      class Class
      {
          struc** mStruct
          struc* operator[](LPCSTR name)
          {
              for (int i = 0; mStruct[i]!=0; i++)
              {
                 if(!strcmp(name,mStruct[i]->name))
                     return mStruct[i];
              }
          }
       
          void mSomeMethod()
          {
              //теперь можно сделать,допустим, так
              mStruct["фыва"] = 0;
          }
      }
    Сообщение отредактировано: Wnplx -
      Запросто. А в чём проблема-то? Принимай const char* параметром, и реализуй, как полагается.
        извиняюсь за ошибки, которые могут встретиться в коде

        Добавлено
        странно, пробовал так уже...

        Добавлено
        выражение должно относиться к целочисленному типу или типу перечисления без области видимости - гласит visual studio

        Добавлено
        при том что сама перегрузка проходит "тест"
          Цитата Wnplx @
          выражение должно относиться к целочисленному типу или типу перечисления без области видимости - гласит visual studio
          Это ты читал о стандартом operator[]. Свой собственный можешь перегружать, как хочешь.
            ну вот - я попробовал сделать точно так же, как в моем примере - и все равно та же ошибка... как правильно?
              Правильно - исправить ошибку. Не спрашивай как, никто не ответит. Но если попробовать потелепатировать, у тебя юникод-приложение.

              Добавлено
              Ага. Ты перегрузил operator[] для class Class, а вызываешь для struc**. Естественно.
                Цитата Wnplx @
                Хочу перегрузить оператор индексации так, чтоб работало все сродни индексаторам в c#

                А я хочу, чтобы шарповские дженерики стали плюсовыми шаблонами.
                Не надо писать на одном языке как на другом. Вы даже не представляете, каким ружьём, направленным вам в яйца, являются эти ваши struc*, struc** и LPCSTR.
                И начните уже изучать язык по книжке, а не по форуму.
                  Цитата MyNameIsIgor @
                  Вы даже не представляете, каким ружьём, направленным вам в яйца, являются эти ваши struc*, struc** и LPCSTR.

                  Да? Насколько все плохо?
                    Не настолько смертельно, но да, без хорошего понимания указателей лучшие с ними не связываться. В C/C++ указатели - далеко не то, что ссылки в шарпе. Во-первых, нет сборки мусора, во-вторых, указывать они могут отнюдь не только на объекты в динамической памяти.
                      Цитата Wnplx @
                      Насколько все плохо?

                      Это опасно - неосторожное движение приведёт к неприятным последствиям.
                        ааа вот вы про что... все в порядке, я очень внимателен
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0.0926 ]   [ 16 queries used ]   [ Generated: 24.06.26, 23:17 GMT ]