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

    +46

    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
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    //Сом ненужный щит
    
    #include <iostream>
    using namespace std;
    
    #include <string>
    #include <iostream>
    
    struct Tracer {
       Tracer(void)
          :m_name("(none)")
       {
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
       }
       Tracer(const std::string & name)
          :m_name(name)
       {
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
       }
       Tracer(const Tracer & other)
          :m_name(other.m_name)
       {
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
       }
       Tracer(const Tracer && other)
          :m_name(other.m_name)
       {
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
       }
       Tracer & operator=(const Tracer & other) {
          m_name = other.m_name;
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
          return *this;
       }
       Tracer & operator=(const Tracer && other) {
          m_name = other.m_name;
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
          return *this;
       }
       ~Tracer() {
          std::cout << "[" << m_name << "]    " << __PRETTY_FUNCTION__ << std::endl;
          m_name="You looser!";
       }
    
       std::string m_name;
    };
    
    //Тот щит, ради чего всё затевалось
    
    template<class T> const T&  Min(const T &x, const T &y) { return (x.m_name < y.m_name) ? x : y; }
    
    int main() {
      const Tracer& mr = Min(Tracer("a"), Tracer("b"));
      cout<<"Some work with mr: "<<mr.m_name<<endl;
      return 0;
    }

    [b] Tracer::Tracer(const string&)
    [a] Tracer::Tracer(const string&)
    [a] Tracer::~Tracer()
    [b] Tracer::~Tracer()
    Some work with mr:

    Этож сколько я коммитов сделал с возвратом константной ссылки на константный параметр.

    LispGovno, 04 Февраля 2014

    Комментарии (29)
  2. C++ / Говнокод #14501

    +36

    1. 1
    2. 2
    3. 3
    t = Min(::std::cref(x), ::std::cref(y));
    //или в зависимости от ситуации 
    t = Min(::std::move(x), ::std::move(y));

    Абстракционизм или Кубизм?

    LispGovno, 04 Февраля 2014

    Комментарии (19)
  3. C++ / Говнокод #14475

    +31

    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
    #include <string>
    #include <iostream>
    #include <functional>
     
    using namespace std;
    
    template<class L, class... Ls>
    struct OL: L, OL<Ls...>{
       OL(const L& l, const Ls&... ls): L(l), OL<Ls...>(ls...){}
       using L::operator();
       using OL<Ls...>::operator();
    };
    
    template<class L1, class L2>
    struct OL<L1, L2>: L1, L2{
       OL(const L1& l1, const L2& l2): L1(l1), L2(l2){}
       using L1::operator();
       using L2::operator();
    };
    
    
    template<class... Ls>
    OL<Ls...> OverloadLambda(const Ls&... l){
       return OL<Ls...>(l...);
    }
    
    template<class L>
    L OverloadLambda(const L& l){
       return l;
    }
    
    void OverloadLambda(void) = delete;
    
    int main() {
       int i=5;
       auto lambda=OverloadLambda(  [=](int v){cout<<__func__<<" "<<i<<" "<<v<<" int"<<endl;},
                                    [=](string v){cout<<__func__<<" "<<i<<" "<<v<<" string"<<endl;},
                                    [=](float v){cout<<__func__<<" "<<i<<" "<<v<<" float"<<endl;});
       lambda(0);
       lambda("Hello");
       lambda(1.0f);
       i=600;
       auto lambda1=OverloadLambda( [=](int v){cout<<__func__<<" "<<i<<" "<<v<<" int"<<endl;});
       lambda1(4);
       ///*auto lambda0 =*/ OverloadLambda();
       return 0;
    }

    Специальная олимпиада объявляется открытой!
    http://ideone.com/y14z5Y
    Там много другого кода и какой-то из старых тем, а мне лень весь облазить.

    LispGovno, 03 Февраля 2014

    Комментарии (181)
  4. C++ / Говнокод #14472

    +33

    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
    template<typename F, typename... Fns>
    struct Overloaded
    {
      std::tuple<F,Fns...> fns;
      
      // эта и следующая за ней функция нужны для рекурсивного
      // накопления кортежа из всех входящих функций
      template<typename First, typename... Others>
      std::tuple<First,Others...> collect(First f, Others... others) {
        auto t = std::make_tuple(f);
        return std::tuple_cat(t, collect(others...));
      }
      template<typename Single>
      std::tuple<Single> collect(Single f) {
        return std::make_tuple(f);
      }
      
      Overloaded(F f, Fns... others) {
        // сохраняем кортеж функций
        fns = collect(f, others...);
      }
    };
    
    template<typename F, typename... Fns>
    Overloaded<F,Fns...> make_overloaded(F f, Fns... fns) {
      return Overloaded<F,Fns...>(f,fns...);
    }
    
    //...
    
    void F1(int) {}
    void F2(int, float) {}
    // ...
    auto f = make_overloaded(F1, F2);

    Не хочется связываться с бустом ввиду его убогости громоздкости. Поэтому пытаюсь сделать сам на чистом C++11 без макросов.
    Не понятно теперь как перегрузить оператор ()?
    Задействовать enable_if? Ни чего в голову не приходит.
    Есть у кого идеи?

    Оттуда

    LispGovno, 03 Февраля 2014

    Комментарии (7)
  5. C++ / Говнокод #14471

    +24

    1. 1
    int f(int = 7, int * = nullptr, int (*(*)(double))[3] = nullptr){

    http://ideone.com/BcZ7Ja

    LispGovno, 02 Февраля 2014

    Комментарии (36)
  6. C++ / Говнокод #14459

    +15

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    #define TEST_MODE ON
    
    ...
    
    #ifdef TEST_MODE
    #    include "fake_singelton.h"
    #else
    #    include "work_singelton.h"
    #endif

    оттуда

    LispGovno, 01 Февраля 2014

    Комментарии (65)
  7. C++ / Говнокод #14458

    +20

    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
    Ini ini(m_serviceProvider);
            if( ini.load( gameInputStream ) == false )
            {
                LOGGER_ERROR(m_serviceProvider)("StartupConfigLoader::loadGame_ Invalid load game settings '%s'"
                    , _gameIniPath.c_str()
                    );
    
                return false;
            }
    
        IniUtil::getIniValue( ini, "Project", "Name", _settings.projectName, m_serviceProvider );
        IniUtil::getIniValue( ini, "Project", "Company", _settings.companyName, m_serviceProvider );
        IniUtil::getIniValue( ini, "Project", "Codename", _settings.applicationSettings.projectCodename, m_serviceProvider );
        IniUtil::getIniValue( ini, "Project", "Version", _settings.applicationSettings.projectVersion, m_serviceProvider );
        IniUtil::getIniValue( ini, "Locale", "Default", _settings.defaultLocale, m_serviceProvider );
        IniUtil::getIniValue( ini, "Game", "ContentResolution", _settings.applicationSettings.contentResolution, m_serviceProvider );     
        IniUtil::getIniValue( ini, "Game", "FixedContentResolution", _settings.applicationSettings.fixedContentResolution, m_serviceProvider );
        IniUtil::getIniValue( ini, "Game", "PersonalityModule", _settings.personalityModule, m_serviceProvider );
        IniUtil::getIniValue( ini, "Game", "AlreadyRunning", _settings.alreadyRunning, m_serviceProvider );
        IniUtil::getIniValue( ini, "Game", "WindowModeCheck", _settings.applicationSettings.windowModeCheck, m_serviceProvider );
        IniUtil::getIniValue( ini, "Window", "Size", _settings.applicationSettings.windowResolution, m_serviceProvider );
        IniUtil::getIniValue( ini, "Window", "Bits", _settings.applicationSettings.bits, m_serviceProvider );
        IniUtil::getIniValue( ini, "Window", "Fullscreen", _settings.applicationSettings.fullscreen, m_serviceProvider );
            IniUtil::getIniValue( ini, "Window", "MaxFPS", _settings.maxfps, m_serviceProvider );
        IniUtil::getIniValue( ini, "Window", "VSync", _settings.applicationSettings.vsync, m_serviceProvider );

    Это оттуда уже другой. Они все сговорились что-ли? Ынтерпрайз головного мозга.
    PS: boost::property_map не осилил.

    LispGovno, 31 Января 2014

    Комментарии (76)
  8. C++ / Говнокод #14456

    +4

    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
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    struct ServiceProvider1
    {
      ServiceProvider1(Service2& service1, Service3& service2, Service3& service3, Service4& service4, Service5& service5):
        service1(service1),
        service2(service2),
        service3(service3),
        service4(service4),
        service5(service5),
     {}
    
      fun<Service1> service1;//fun - функциональный объект (operator() перегружен), хранящий ссылку на сервис, чтобы не писать кроме членов ещё и две функции - константную и не константную.
      fun<Service2> service2;
      fun<Service3> service3;
      fun<Service4> service4;
      fun<Service5> service5;
    };
    
    class Service1
    {
    public:
      template<class ServiceProvider> 
      Service1(ServiceProvider serviceProvider):
        service2(serviceProvider.service2()),//Ссылки на сервисы получаем.
        service3(serviceProvider.service3()),
        myMember1(serviceProvider),//эти мемберы сами внутри воспользуются провайдерами зависимостей
        myMember2(serviceProvider),
        myMember3(),
        myMember4(myServiceProviderGeter<ServiceProvider>()),//Этому мембору понадобились новые зависимости, часть тех, что хранятся в ServiceProvider, а часть новых среди членов Service1.
        myMember5(myServiceProviderGeter<ServiceProvider>())
        myMember6(myServiceProviderGeter<ServiceProvider>())
      {}
      ...
    private:
      template<class BaseServiceProvider>
      struct MyServiceProvider: BaseServiceProvider
        {
           MyServiceProvider(BaseServiceProvider baseServiceProvider, Service6& service6, Service7& service7):
             BaseServiceProvider(baseServiceProvider),
             service6(service6),
             service7(service7)
           {}
           
           fun<Service6> service6;
           fun<Service7> service7;
        };
    
      template<class BaseServiceProvider> MyServiceProvider<BaseServiceProvider> myServiceProviderGeter(BaseServiceProvider baseServiceProvider) const
      {
        return MyServiceProvider<BaseServiceProvider>(baseServiceProvider, this->myMember2, this->myMember3);
      }
    };
    ...
    ServiceProvider1 sp(...);
    Servive1 service1(sp);
    Service8 service8(sp);
    Service9 service9(sp);
    ...

    оттуда

    LispGovno, 31 Января 2014

    Комментарии (146)
  9. C++ / Говнокод #14454

    +76

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    try {
        IntToStr(pageid);
    }
    catch (...) {
        pageid = 0;
    }

    А вдруг?

    bormand, 31 Января 2014

    Комментарии (30)
  10. C++ / Говнокод #14424

    +10

    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
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    align.h: 
    #pragma once
    #include "stdint.h"
    namespace tblib 
    {
      template <typename T>
      struct check_align
      {
        uint8_t c;
        T t;
        check_align();
        check_align(const check_align&);
        check_align&operator=(const check_align&);
      };
    
      template <typename T>
      struct align_value
      {
        enum { value = sizeof(check_align<T>)-sizeof(T) };
      };
    
      template <int N>
      struct align_by_size;
    
      template <> 
      struct align_by_size<1> { uint8_t guts; };
    
      template <> 
      struct align_by_size<2> { uint16_t  guts; };
    
      template <> 
      struct align_by_size<4> { uint32_t guts; };
    
      template <> 
      struct align_by_size<8> { uint64_t guts; };
    
      template <typename T>
      struct align
      {
        align_by_size<align_value<T>::value> guts;
      };
    };
     класс массива (начало), файл tbarr.h: 
    #pragma once
    
    #include "stdint.h"
    #include "assert.h"
    #include <algorithm>
    #include "tbslice.h"
    #include "align.h"
    
    // FUCK THE EXCEPTIONS
    
    template <typename T>
    void construct (T* first, T* last) {
      while (first!=last)  {
        new(first) T;
        ++first;
      }
    }
    
    template <typename T>
    void destroy (T* first, T* last)  {
      while (last!=first)  {
        --last;
        last->~T();
      }
    }
    
    namespace tblib
    {  
      template <typename T, int N>
      class base_array
      {
        union
        {
          uint8_t memory [sizeof(T[N])];
          align<T> aligner;
        };
      public :

    мой выравниватель
    намного красивее бустовского, не так ли?

    TarasB, 27 Января 2014

    Комментарии (31)