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

    +11

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    #include <QVector>
    #include <QString>
    
    template< class TYPE> 
      class call
      {
        public:
          call( TYPE& vl ): value(vl){}
          TYPE& value;
      };
    template< class TYPE> 
      call<TYPE> all( TYPE& vl ) 
        { return call<TYPE>(vl); }
    
    template< class TYPE_OUT, class TYPE> 
      void operator << ( TYPE_OUT& out, call<TYPE>& in )
    {
      TYPE& value = in.value;
      for( TYPE::iterator itr = value.begin() ; itr!=value.end(); itr++)
        out << *itr;
    }
    
    //**********************************************************************
    
    QVector<int> arr;
    QVector<QString> arrStr;
    class Cstream{} stream;
    
    void operator << ( Cstream& , const int value)
    {
      printf("%i\n",value);
    }
    void operator << ( Cstream& , const QString& value)
    {
      printf("%s\n",value.toAscii().data());
    }
    
    
    int main(int argc, char *argv[])
    {
      for( int i=0; i<6;i++)
        arr.push_back(i);
      arrStr << "asd" << "sadas" << "sadsa";
    
      stream << all(arr);
      stream << all(arrStr);
    return 0;
    }

    http://www.gamedev.ru/flame/forum/?id=171504
    > @При копирование на говнокод сохранять авторство.

    Запостил: LispGovno, 11 Января 2013

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

    • Профиль автора susageP
      Ответить
      • Спасибо за ссылку на профиль автора, ну так а чего тут удивительно смешного?
        Ответить
        • Много лишнего, мог бы просто перегрузить << для СStream и QVector
          Ответить
          • >> мог бы просто перегрузить << для СStream и QVector
            Конечно, этого бы хватило. Но если это для отладки - то все кутишные контейнеры и так отлично умеют высирать себя в qDebug:
            QVector<QString> v;
            v << "foo" << "bar";
            qDebug() << v; // выведет QVector("foo", "bar")
            Ответить
          • P.S. А шаблонное обобщение тут нахуй ненужно. Стримы разные, и если в отладочном стриме я хочу видеть что-то типа QVector("foo", "bar"), то в CSVшном стриме мне захочется foo;bar, а в QDataStream вообще двоичные данные.

            Понятно, что во всех случаях вектор должен будет высрать все свои элементы. Но из-за того, что между элементов придется пихать различные разделители, и возможно выдать в начале какой-то хидер, обобщение этих джвух строчек просто не имеет смысла.
            Ответить
          • почему никто не упомянул "официальный" способ?

            http://www.cplusplus.com/reference/iterator/ostream_iterator/
            Ответить
            • Потому что все считают этот код нормальным
              Ответить
        • Я тоже ничего смешного не нашёл, типичное школоло, программирующее в надежде на удачное стечение обстоятельств
          Ответить
    • Юный отрок наивен.
      Ответить

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