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

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
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
// reflection.h
template <class T>
QStringList getPropertyList(T)
{
  const QMetaObject& metaObject = T::staticMetaObject;
  ...
  return properties;
}

// Copy-pasted, the parameter now is T*
template <class T>
QStringList getPropertyList(T*)
{
  const QMetaObject& metaObject = T::staticMetaObject;
  ...
  return properties;
}

// In other headers
class IMessage
{
public:
  virtual ~IMessage();
  ...
};

class File
  : public IMessage
{
  ...
};

class Text
  : public IMessage
{
  ...
};

// Usage of all this
QStringList p;
p << getPropertyList(File());
p << getPropertyList(Text());
p << getPropertyList(static_cast<IMessage*>(new File()));

Работаю с шаблонами и теку

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

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

  • Пора уже регистрацию фаек делать платной.
    Ответить
    • В жопе.

      Отвалилась жопа, и вам всё равно? Акция: две жопы по цене одного.
      Ответить
    • В последней строчке (точнее, оно там всплывает). PropertyList берется не по типу объекта, а по статическому типу переменной. То есть если мы передаем в функцию IMessage, то свойства потомка мы не увидим. Может быть, конечно, так и надо зачем-то?
      Ответить
    • 1) Не понимаем, как использовать шаблоны от слова совсем
      2) Мы копипастим как следствие пункта 1
      3) Опять же, как следствие пункта 1, мы вызываем конструкторы объектов вместо того, чтобы просто передать тип
      4) Ну и как вишенка на торте - в последнем случае мы просто течем, так как нахера вызывать delete? Памяти мало что ли?
      5) Понимание того, что static_cast<T>(...) - тоже шаблон (внезапно!) и что надо делать по аналогии, у автора данного кода отсутствует напрочь. Чукча не читатель, чукча писатель.
      Вот как можно переписать этот код (любой джуниор это сделает это с закрытыми глазами)
      template <class T>
      QStringList getPropertyList()
      {
        const QMetaObject& metaObject = T::staticMetaObject;
        ...
        return properties;
      }
      
      QStringList p;
      p << getPropertyList<File>();
      p << getPropertyList<Text>();
      p << getPropertyList<IMessage>();
      Ответить

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

Из-за тебя ушел bormand, guest!

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


    8