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

    −32

    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
    //
    //	std::string wrapper
    //
    namespace priv {
    	class string {
    		std::string &m_s;
    
    		std::string &(std::string::*m_pAssign1)( const char *, std::string::size_type );
    		std::string &(std::string::*m_pAssign2)( const char * );
    
    	public:
    		string( std::string &str ): m_s(str),
    			m_pAssign1(&std::string::assign), m_pAssign2(&std::string::assign) {}
    
    		string &assign( const char *s, std::string::size_type n )
    		{
    			(m_s.*m_pAssign1)( s, n ); return *this;
    		}
    		string &assign( const char *s )
    		{
    			(m_s.*m_pAssign2)( s ); return *this;
    		}
    	};
    }

    сегодня ассимилирую старый хлам на работе (проекты VC6) в студию с нормальными свойствами проектов, конфигурациями, неабсолютными путями и т.д.
    наткнулся в одной из либ на вот это

    Запостил: defecate-plusplus, 30 Мая 2012

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

    • показать все, что скрытоПервый нах. Поставил минус посту.
      Ответить
    • Сделано с целью запрятать подальше все методы std::string'а?
      Ответить
      • показать все, что скрытоТы педомуд?
        Ответить
      • Но все равно не понимаю зачем такие извраты с указателями на метод. Неужели нельзя вызвать m_s.assign()?
        Ответить
      • я хз с какой целью это было сделано и почему бы не использовать std::string напрямую там, где используется эта assign-only обёртка
        потому этот код тут
        подозреваю, что раньше были какие то логи внутри ассигнов, но в сурсконтроле вообще единственная версия этого файла - вот какая есть
        Ответить
        • То есть тут приведена полная реализация класса, и выдрать из него m_s невозможно (ну кроме как из френдов)?
          Ответить
          • именно полная
            ну, думаю, он должен был использоваться как
            std::string s;
            thatlibshit::thatshitfunc(..., priv::string(s));
            // have result in s
            но я беглым поиском не нашел вообще реального использования нигде

            а функции, принимающие priv::string в либе присутствуют, в том то и дело
            Ответить
    • показать все, что скрытоВсем поставил по минусу, СУКИ.
      Ответить
    • Вот так попытаешься высрелить себе в ногу, а это только ссылка на ногу
      Ответить

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