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

    −1

    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
    #include <iostream>
    using namespace std;
    
    struct NG
    {
    	template<class T>
    	struct get
    	{
    		typedef typename T::f type;
    	};
    };
    
    template <typename T, typename NameGetter>
    struct has_member_impl
    {
        typedef char matched_return_type;
        typedef long unmatched_return_type;
        
        template <typename C>
        static matched_return_type f(typename NameGetter::template get<C>*);
        
        template <typename C>
        static unmatched_return_type f(...);
        
    public:
        static const bool value = (sizeof(f<T>(0)) == sizeof(matched_return_type));
    };
    
    template <typename T, typename NameGetter>
    struct has_member{
       enum { value = has_member_impl<T, NameGetter>::value };
     };
     
     class T{};
    
    int main() {
    	cout<<has_member<T, NG>::value;
    	return 0;
    }

    http://ideone.com/4LDGhZ

    LispGovno, 04 Сентября 2013

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

    +13

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    TAbstractMessageFrame * SwitchIfNeedReceivePackets = create_switch(
    		fnc_ext::bind(this,
    					  fnc_ext::compose2(std::greater<WORD>(),
    										fnc_ext::get_mem(&TThisClass::_totalDataLength),
    										fnc_ext::compose1(std::bind1st(std::minus<WORD>(), static_cast<WORD>(TByteBuffer::MaxCapacity)),
    														  fnc_ext::compose1(fnc_ext::get_mem_func_ref(&TThisClass::TByteBuffer::length),
    																			fnc_ext::get_mem(&TThisClass::_receivedBuffer))))),
    //										fnc_ext::get_mem_func(&TThisClass::FreeBufferSpace))),
    		DataByPackets, DataByLength, "Switch If Need Receive Packets" );

    Говногость, 04 Сентября 2013

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

    +13

    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
    void User::AddFriend(User& newFriend)
    {
        friends_.push_back(&newFriend);
        pDB_->AddFriend(GetName(), newFriend.GetName());
    }
    
    //...VS...
    
    void User::AddFriend(User& newFriend)
    {
        friends_.push_back(&newFriend);
        try
        {
            pDB_->AddFriend(GetName(), newFriend.GetName());
        }
        catch (...)
        {
            friends_.pop_back();
            throw;
        }
    }
    
    //...VS...
    
    class VectorInserter//Глобальный безопасный вектороВставлятель.
    {
    public:
        VectorInserter(std::vector<User*>& v, User& u)
        : container_(v), commit_(false)
        {
            container_.push_back(&u);
        }
        void Commit() throw()
        {
            commit_ = true;
        }
        ~VectorInserter()
        {
            if (!commit_) container_.pop_back();
        }
    private:
        std::vector<User*>& container_;
        bool commit_;
    };
    
    void User::AddFriend(User& newFriend)
    {
        VectorInserter ins(friends_, &newFriend);
        pDB_->AddFriend(GetName(), newFriend.GetName());
        // Everything went fine, commit the vector insertion
        ins.Commit();
    }

    LispGovno, 03 Сентября 2013

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

    +8

    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
    template<int ID> struct typeof_access
    {
        struct id2type; //not defined
    };
    
    template<class T, int ID> struct typeof_register : typeof_access
    {
        // define base's nested class here
        struct typeof_access::id2type
        {
            typedef T type;
        };
    };
    
    //Type registration function 
    typeof_register<T, compile-time-constant> register_type(const T&);
    
    //Actually register type by instantiating typeof_register for the correct type
    sizeof(register_type(some-type));
    
    //Use the base class to access the type.
    typedef typeof_access::id2type::type type;

    Igor Chesnokov discovered a method that allows to implement typeof on the VC series of compilers. It uses a bug in the Microsoft compiler that allows a nested class of base to be defined in a class derived from base.

    http://www.boost.org/doc/libs/1_54_0/doc/html/typeof/other.html

    LispGovno, 03 Сентября 2013

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

    +14

    1. 1
    2. 2
    struct Ziga : std::exception {};
    throw Ziga();

    Теперь вы знаете как кинуть зигу в C++ !!

    PSIAlt, 02 Сентября 2013

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

    −16

    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
    #include <iostream>
    #include <string>
    
    using namespace std;
    /*
    
    */
    
    int change_word(const int begin_pos, string &words, int k, char c)
    {
        int pos = begin_pos;
        int char_count = 0;
    
        bool replaced = false; 
    
        while(pos < words.length() && isalpha(words[pos]))
        {
    
            char_count++;
            if(char_count == k && !replaced)
            {
                words[pos] = c;
                replaced = true;
    
            }
            pos++;
    
        }
    
        return pos; 
    }
    
    void change_words(string &words, int k, char c)
    {
        int i = 0;
    
        while(i < words.length())
        {
            if(isalpha(words[i]))
            {
                i = change_word(i, words, k, c);
    
            }
            else
            {
                i++;
            }
    
        }
    
    }
    
    
    int main()
    {
        char c = '>'; 
        int k = 0; 
        string words = "Length of the substring to be copied";
    
        cout << "enter number:";
        cin >> k;
        change_words(words, k, c);
    
        cout << "changed text: " << words << endl;
        return 0;
    }

    лаба на с++, заменить в тексте к-тую букву на символ с.

    spivti, 01 Сентября 2013

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

    +12

    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
    // Вопрос: как сгенерировать в рантайме предупреждение от компилятора?
    // http://stackoverflow.com/q/4187967
    
       void f(int*p = nullptr)
        {
        if (!p)
    {
    //HERE I WOULD LIKE TO HAVE AN MSG THAT WOULD BE DISPLAYED DURING COMPILATION AS A WARNING POSSIBLY
    }
        }
    
    
    // Ответ: очевидно же, вызвать компилятор для соответствующего кода.
    // http://stackoverflow.com/a/4188155
    
    void f(int *p = nullptr) {
        if (!p) {
            system("gcc -Wall warning.c");
        }
    }

    Каков вопрос - таков ответ.

    Xom94ok, 01 Сентября 2013

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

    +64

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Товарищи, стоит задача: найти количество слов в строке.
     Автор  (http://programmersforum.ru/showthread.php?p=1269850#post1269850) просто делит строку по пробелам, затем
    подсчитывает кол-во слов.
    Я же,  говорю, что такой подход НЕПРАВИЛЕН,  т.к. в русском
    языке (да и не только) слова разделяются символами пунктуации, которые сами в состав слова не входят - следовательно, делить нужно по ним: 
     [code]" ' . , ! ?: ;  -  + <пробел> <табуляция> ( )[code]
     На меня сразу же наехали и поудаляли мои сообщения. Неужели я не прав?

    Баян все еще там: http://programmersforum.ru/showthread.php?p=1269850#post1269850

    Stertor, 28 Августа 2013

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

    +15

    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
    #include <cstdio>
    #include <cstdlib>
    #include <fstream>
    // #include <cstring>
    #include <string>
    using namespace std;
    
    string exec = "\"c:\\Program Files (x86)\\GnuWin32\\bin\\wget.exe\"";
    string root = "http://techno.org/electronic-music-guide/";
    const char* flist = "list.txt";
    
    void getFile(string name)
    {
    	string command = exec + " " + root + name;
    	system(command.c_str());
    }
    
    int main(int argc, char* argv[])
    {
    	ifstream fin(flist);
    	string name = "";
    
    	while(true)
    	{
    		if (fin.eof()) break;
    		getline(fin, name);
    		getFile(name);
    	}
    	return 0;
    }

    Суть такова: ваш покорный слуга копался в исходниках этого: http://techno.org/electronic-music-guide/ -- ради музыкальных лупов на рингтон. Узнал, что это реализовано swf-модулями, список которых он добыл после объединения кучи скриптов и сортировки в NPP. Осталось лишь найти способ загрузить эти файлы по списку.
    Но искать было лень, поэтому реализовано подручными средствами: мозгом, компилятором и случайно попавшимся wget'ом (FTW).

    ckopo, 28 Августа 2013

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

    +23

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    void main()
    {
    	// Откуда в программе баги берутся???
    	struct ╯°□°{}╯︵┻━┻;
    	// Понятия не имею.
    	// Код классный, имена переменных говорят сами за себя...
    	// Строк комментариев больше, чем строк кода...
    	// А баги всё-равно есть.
    	// КАК ЖЕ МЕНЯ ВСЁ ЭТО БЕСИТ!
    	(╯°□°)╯︵┻━┻;
    }

    В ответ цитате с баша:

    scala самый крутой язык, в нём можно столами кидаться
    def ┻━━┻ = {
    new Exception("ACHTUNG!")
    }
    throw ┻━━┻

    На С/С++ тоже можно столами кидаться и более красиво! Достаточно сохранение файла в unicode включить.

    Little-Horny, 25 Августа 2013

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