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

    +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
    #include <iostream>
    
    enum Quiet { LOG };
    
    template<typename T>
    Quiet operator <<(Quiet o, T) {
        return o;
    }
    
    static inline Quiet operator <<(Quiet o, std::ostream &(*)(std::ostream &)) {
        return o;
    }
    
    int main() {
        LOG << "Hello world!" << std::endl;
        return 0;
    }

    Измыслил сегодня вот такую вот затычку для выключения логгирования

    Запостил: uranix, 20 Июня 2013

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

    • энумы, шаблоны, перегрузка операторов - все служит одной цели.
      Ответить
      • Реализовать то, что можно было делать в сишечке ещё 30 лет назад с помощью макросов?
        Ответить
    • раз уж LOG и так записан огромными буквами, то проще его сделать в виде макроса
      #define LOG    if (1) {} else foo
      где foo - да хоть std::cout
      тогда даже исполняться будет быстрее, т.к. компилятор тупо выбросит невыполняющуюся ветвь
      Ответить
      • Ну тогда можно написать и if (log_disabled) {} else, где log_disabled - константа, и надеяться на оптимизатор, который уберет мертвый иф ;)
        Ответить

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