1. C++ / Говнокод #3732

    +172

    1. 1
    map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > > m;

    великолепно потом пробегать по коллекции

    Запостил: MAK, 19 Июля 2010

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

    • typedef походу не знаком
      Ответить
      • Да даже с typedef выглядело бы страшно и неудобно. Он только несколько сократил бы строку. Такую конструкцию можно было аккуратно разложить и без синонимов.
        А вообще да, там много чего не знакомо, судя по всему. По всему классу разбросаны гигантские итераторы.
        Ответить
        • В смысле "гигантские"?
          Ответить
          • map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > >::iterator it;
            map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > >::iterator jt;
            set<pair<pair<int,int> > >::iterator iter;

            ну и т.п.
            Ответить
        • Прослеживаем эволюцию :
          typedef pair<int,int> IntPair;
          typedef pair<IntPair, IntPair> IntPairDuo;
          typedef pair<IntPair, int> IntPairInt;
          typedef map<IntPairInt, vector<IntPairDuo> > MegaMap;
          
          map<pair<pair<int,int>, int>, vector<pair<pair<int,int>, pair<int,int> > > > m;
          map<pair<IntPair, int>, vector<pair<IntPair, IntPair> > > m;
          map<IntPairInt, vector<IntPairDuo> > m;
          MegaMap m;

          Пусть такие вложенности и изврат, который надо передизайнить.
          Но даже в таком случаем typedef помогает не запутаться во всём этом.
          И даже итераторы не будут такие сумасшедшие:
          MegaMap::iterator it;
          Ответить
          • Действительно, лучше сразу определить типы. Во-первых, они могут где-то пригодиться. Во-вторых, так проще избежать ошибок.
            Пихать всюду синтетические конструкции вместо простого названия типа — зло.
            Ответить
          • Да typedef конечно мог бы быть полезен, но просто этот пример был выбран как самый показательный. Редизайн в любом случае необходим
            Ответить
    • Обезьяна с гранатой, да не в обиду будет сказано. А это же потом кому-то читать возможно придется.
      Ответить
    • OMG!!! И для каких же целей нужна такая переменная?
      Ответить
      • Что-то вроде списка ссылок на атрибуты, связанные с объектом отчета (первая пара пар). Что характерно вокруг по коду корявые, но более или менее говорящие названия object_parent, data_column_attributes, row_indicator. А тут m, вроде "и так же все понятно".
        Ответить
    • Чуваг не знал, что есть boost::tuple. И вообще такая обезбашенность говорит о корявом проектировании.
      Ответить
      • Кортеж тут ничем не поможет. С таким подходом как у автора ГК будет что-то вроде:
        std::map<boost::tuple<std::pair<std::pair<int,int>, int>>, std::vector<boost::tuple<pair<pair<int,int>, pair<int,int> > > > > m;

        То бишь, ещё больший 3.14здец.
        Ответить

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