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

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
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
class cSG5DataException ... {
    cSG5DataException(CTstatus Status, CTsymbol Error,
                      CTsymbol SubError, std::string Description, ...)
   {
     /* форматирование сообщения */
   }
   /* виртуальный деструктор наличиствует */
};

class cExcKVSDuplicateKey : public cSG5DataException  {
 /* пусто */
};

/* код */

    throw (cExcKVSDuplicateKey*) new cSG5DataException( CT_statusFail,
                                                        CT_errorObjectExists,
                                                        CT_errorObjectExists,
     "cKVSet_STL_map::insert( CTint k, Value& v ), %d is already in the map",k);

вот так хитро народ обходит проблему писания конструкторов. темплейт фактори функцию сделать не догадались. но С-style конверсию типов - пожалуйста. мне честно говоря и сложно то себе представить что это как-то работать может. смена типа поинтера то на тип объекта не влияет.

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

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

    • в паре мест пытаются. но я не уверен что это кто-то тестировал и почти везде где эта cExcKVSDuplicateKey она перебрасывается как cSG5DataException... например:

      [code=c++]

      try {
      sectionBlock->insert(KeysK, *section);
      } catch (cExcKVSDuplicateKey* eKvset) {
      delete eKvset;
      throw new cSG5DataException(CT_statusFail,
      CT_errorSystem,
      CT_errorSystem,
      "Config->GetAll: Error during insert section pointer into kvset."
      "\n file: %s", m_file->getName().c_str()
      );
      }
      [code]

      Вот тот `delete eKvset;` тоже говно уже само по себе. бросить new'ed эксепшн из тривиальной функции, словить его, delete его, и new'кнуть новый почти такой же эксепшн и его еще раз бросить.

      RFC1925, пункт 6а рулит.
      Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8