Кресты / Говнокод #6067 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
void СSomeClass::InternalRemovePath( QString qsPath, int pUIModule )
{
  QProgressDialog * pDlg = (QProgressDialog *)pUIModule;
...................
}
.......................
void someFunction ()
{
..................
QProgressDialog * pProgress = NULL;
pProgress = new QProgressDialog( QObject::tr( "Deleting...") , QObject::tr( "Abort" ), 0, nTotal, NULL );
InternalRemovePath( qsPath , (int) pProgress );
..................
}

И по коду таких вещей (приведение указателей к int при передаче в функции) очень много. Пока собрал проект, задолбался.
Интересно, что автор курил? Хотя, нет - тут уже что-то потяжелее.

Запостил: panter_dsd panter_dsd, (Updated )

Комментарии (52) RSS

    • При чем тут плюсы. Такими темпами чел и на барсике хрень напишет.
      Ответить
      • при том что в жабе например тебе никто скастить инт в у казатель на объект не даст (там нет указателей но в ссылку тоже не скастишь)
        Ответить
        • Ну в жабе человек сможет кастовать всё в Object (аналог void*). А потом где надо кастовать обратно.

          Язык тут ни причем
          Ответить
          • наоборот, Object можно привести к любому объекту так как он является общим предком для всех
            Ответить
            • Я имел в виду что-то типа
              void InternalRemovePath( String qsPath, Object pUIModule )
              {
                QProgressDialog pDlg = (QProgressDialog)pUIModule;
                // ...................
              }
              
              void someFunction ()
              {
              // ..................
              ProgressDialog pProgress = new ProgressDialog(/*...*/);
              InternalRemovePath(qsPath, pProgress );
              // ..................
              }
              Ответить
              • ага, но pProgress Object'ом (тем более int'ом) уже не станет, он и так содержит всё Object'овские поля и методы
                Ответить
            • >Object можно привести к любому объекту
              вы попутали, это любой объект можно привести к object, а не наоборот.
              Ответить
                • пример чего ? Что object нельзя привести к какому-нибудь List, потому что он есть Button, или что ?
                  Ответить
                  • > любой объект можно привести к object, а не наоборот.
                    приведите List или Button к Object
                    Ответить
                        • у вас извращенное понятие о приведении типов. где учились ?
                          Ответить
                              • >(ArrayList<String>) o
                                явное приведение к ArrayList

                                конкурс на приведение наследника к предку продолжается
                                Ответить
                                • а наследника к предку запросто приведется неявно. Все-таки полезно держать ИДЕ под рукой
                                  Ответить
                                    • кажется, спор был по этому поводу? не поленился.
                                      import java.awt.Button;
                                      import java.util.ArrayList;
                                      import java.util.List;
                                      
                                      public class T {
                                        public static void main(final String[] args) {
                                          final List<String> l = new ArrayList<String>();
                                          Object o = l;
                                          @SuppressWarnings("unchecked")
                                          ArrayList<String> ll = (ArrayList<String>) o;
                                          final Button b = new Button();
                                          o = b;
                                          ll = (ArrayList<String>) o;
                                        }
                                      }


                                      компилится, и в рантайме, как положено,
                                      Exception in thread "main" java.lang.ClassCastException: java.awt.Button cannot be cast to java.util.ArrayList
                                      	at T.main(T.java:13)
                                      Ответить
                                      • вижу, ВИЖУ как Object стал ArrayList (т.е. привёлся к нему) а потом привёлся к Button, так как ArrayList унаследован от Object , наблюдается явное риведение предка к наследнику, обратного приведения замечено не было
                                        Ответить
                                        • нене. здесь мы:
                                          создали обьект ArrayList и сразу привели его к интерфейсу List
                                          привели к Object
                                          привели Object обратно к ArrayList
                                          создали Button
                                          присвоили Button Object'у
                                          и затем попытались Object привести к ArrayList, зная, что на самом деле там лежит Button

                                          у вас перепутано построение фразы "привести х к у"

                                          ладно, ваша очередь кодить. Покажите, что вы хотели?
                                          Ответить
                                          • как говорит википедия "Приведе́ние ти́па (type conversion) — преобразование значения переменной одного типа в значение другого типа." когда был обявлен интерфейс он не имел никого значения и затем был приведён в значение типа ArrayList . а исключени выскачило не из-за того что o в котором значение типа ArrayList попытался стать Button а из-за того что Button не смог стать ArrayList
                                            Ответить
                                            • не интерфейс приводили, а ArrayList к интерфейсу.

                                              > исключени выскачило не из-за того что o в котором значение типа ArrayList попытался стать Button а из-за того что Button не смог стать ArrayList

                                              вы опровергаете не мое утверждение, а его отрицание, как раз доказывая мое.
                                              Ответить
                                      • >кажется, спор был по этому поводу?
                                        Это даже не спор. Просто человек путается в понятиях объявленного и реального типов объекта.
                                        Ответить
                            • > когда заканчиваются аргументы, люди пишут подобное
                              Вы идиот или притворяетесь?
                              Ответить
          • а знаешь для чего ещё нужна соответствующая квалификация? для брэйнфака. и чего на нём никто крупных проектов не пишет? глупые людишки
            Ответить
        • если вам не нравится, это еще не значит, что оно говно.

          вот мне не нравятся обои в цветочек. Но они в цветочек, не в говно 🙂
          Ответить
        • Правда по какой-то малообъяснимой причине миф о "говнистости плюсов" имеет хождение строго и исключительно среди говнокодеров. Я думаю это факт уже говорит сам за себя.
          Ответить
            • А по моему тут на лицо видно, что код писал "гуру" винапи, которого заставили писать на Qt. Те, кто изначально учились Qt совсем по другому прогают
              Ответить
        • Чтобы настолько говняно писать юзая Qt это надо мозг вышибить чем-то тяжелым
          Ответить
  • С подобными трюками (конвертирование между указателями и целыми) иногда приходится сталкиваться в callback-интерфейсах. Но бывает, что иногда какой-нибудь умник решит завести отдельный параметр для передачи произвольных пользовательских данных и использует для этой цели тип 'int'. Разумеется, использовать для этой цели тип 'int' - это классика говнокодирования. Если уж кому-то приспичило использовать для этого целый тип, то это должен быть 'uintptr_t'. А по уму такие "пользовательские параметры" должны передаваться через 'void *'.
    Ответить
  • плюсы это большой костыль, хоть он с гидравлическим приводом и на гусенечном ходу, но нога всё равно не выростит
    Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8