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

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    String str=String::Format("a=<^>, b=<^>, c=\"<^>\"")(a)(b, 4)(c);  //str будет равно: a=234, b=32422.1231, c="Текст"
    str=String::Format(nullptr)(a)("+")(b, 4)("=")(a+b, 4);  //str будет равно: 234+32422.1231=32656.1231
    str=String::Format("<^><^>")(5);  //Выбрасывает исключение, так как переданы не все аргументы
    str=String::Format("<^>")(3252)(3.1415926);  //Выбрасывает исключение, так как передан лишний аргумент

    Форматирование строк с помощью смайликов.

    http://www.gamedev.ru/code/forum/?id=148200&page=4#m55

    Запостил: CPPGovno, 27 Августа 2011

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

    • Синяки вокруг глаз.
      Ответить
    • Офигеть...
      Ответить
    • зачот
      Ответить
    • Разве это можно назвать говнокодом? Жду объяснений, почему.
      Ответить
      • А почему вы не сделали ваши Format каррируемым? было бы круто...
        Ответить
        • Каким? Что значит каррируемым?
          Ответить
          • Чтобы передача не всех аргументов возвращала Format, ожидающий меньшее число аргументов, а не вызывала выброс исключения.
            Ответить
            • Так уже можно сделать:
              auto& formatter=String::Format("<^> <^>")(543);
              String str=formatter(7643.357);
              Выброс исключения происходит только при преобразовании в строку.
              Ответить
    • Святые аппликативные функторы...
      Ответить
    • >Мега идея пришла в голову.
      str=String::Format("<^><^>")(3252)("+")(3.1415926);  //Выбрасывает исключение, так как передан лишний аргумент
      .......................
      Log::Format(":) <^><^><^>")(3252)(3.1415926);  //Вывод в нормальный лог.
      Log::Format(":| <^><^><^>")(3252)(3.1415926);  // Warning
      Log::Format(":( <^><^><^>")(3252)(3.1415926);  //Ошибка
      Log::Format("8O <^><^><^>")(3252)(3.1415926);  //Фатальная ошибка.
      Log::Format("^_^ <^><^><^>")(3252)(3.1415926);  //Не создавать исключения, сделать то что имел в виду автор.
      Ответить
    • Лучше бы не исключение кидало, а ошибку компиляции.
      Ответить
      • К сожалению, так сделать нельзя.
        Ответить
        • Почему? Если по другому это все организовать, то можно. :)
          Ответить
          • Например, как? В языке D так вроде можно делать через шаблоны, а C++ не знаю как. Тем более, что компилятор не разбирается, что находится в строке.
            Ответить

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