1. Swift / Говнокод #23638

    0

    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
    open class Converter {
        init() { }
        func convert<T, U>(from: T) -> U {
            return self.convert(from: T.self)
        }
        
        private func convert(from: MyClass1) -> MyClass2 {
            return MyClass2(value: from.value)
        }
        
        private func convert(from: MyClass2) -> MyClass1 {
            return MyClass1(value: from.value)
        }
    }
    
    let converter = Converter()
    let mC1 = MyClass1(value: 10)
    let mC2 = MyClass2(value: 30)
    
    let mc2_1: MyClass2 = converter.convert(from: mC1)
    let mc1_1: MyClass1 = converter.convert(from: mC2)

    So deep, too recursion

    Запостил: Desktop, 04 Января 2018

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

    • class MyClass1 {
      var value: Int
      init(value: Int) {
      self.value = value
      }
      }

      class MyClass2 {
      var value: Int
      init(value: Int) {
      self.value = value * 2
      }
      }

      если шо
      Ответить
    • Я не понял нихуя, это генерики или крестошаблоны?
      Ответить
      • Это Свифтовые генерики. Бесполезны как и любые другие генерики.

        Кстати, вопрос на засыпку: можно ли сделать в крестах variadic template parameters так, чтобы для каждого typename была сгенерирована перегрузка некоторой функции?
        Ответить
        • Как-то так?
          http://coliru.stacked-crooked.com/a/e811fd1ce0c13519
          Ответить
          • Ого, спасибо.
            Выглядит как сильное колдунство.

            А с использованием только одной структуры это возможно сделать?

            Надо ещё проверить, можно ли так забабахать абстрактный класс
            Ответить
            • > одной структуры
              Скорее всего нет, миксины в крестах только через наследование эмулируются...

              З.Ы. Вот метаклассы завезут лет через 10-20 - там можно будет.
              Ответить
              • И выпилят половину стандарта! Оставят описание метаклассов и реализацию фич языка, описанную, как метаклассы.

                В итоге у нас будет сколько языков в одном? Сейчас есть: С-с-классами, препроцессор, шаблонная метушня, язык описания концептов, добавят ещё рефлексию (со своим синтаксисом) и метаклассы. С++ — набор языков для создания своего идеального говноязыка.
                Ответить
                • > И выпилят половину стандарта
                  Может его хоть прочитать будет реально... А то сейчас только корейские задроты могут полностью прочесть и осознать стандарт.
                  Ответить
                  • i am a very baaaad boy
                    Ответить
                  • >А то сейчас только корейские задроты могут полностью прочесть и осознать стандарт

                    Полностью прочесть - это возможно.

                    Но вот "полностью осознать", это сможет только великий дзенский мудрец. Всю жизнь он будет курить Святой Стандарт в попытках полностью осознать Его божественность.
                    Ответить
                    • Хотел оценить всю мощь стандарта. Он есть где-то в одном PDF?
                      А то вот нашёл, его ещё покупать надо https://www.iso.org/standard/68564.html О_О
                      Ответить
                      • i am a very baaaad boy
                        Ответить
                      • Используй черновики, они бесплатны. Последний черновик стандарта отличается от стандарта только титульным листом. Полезные линки:
                        http://wg21.link/standard
                        http://wg21.link/
                        Ответить
                        • Охуеть! Стандарт правда платный? XD
                          Ответить
                          • Требования ISO: вся формальная документация платная. Поэтому и делают последний публичный черновик стандарта максимально приближённым к стандарту.
                            Ответить
                            • Што? Нахуя? Нахуя тогда делать стандарт на язык платным?
                              Ответить
                              • Поясняю для особо одарённых: чтобы сделать стандарт более-менее официальным, его нужно публиковать через ISO. ISO забирает права на распространение и запрещает раздавать стандарт бесплатно. НО! На черновики этот запрет не распространяется. Поэтому, чтобы обойти копирастию, Комитет делает официальный стандарт неотличимым от последнего черновика.
                                Ответить
                                • Сам ты одаренный. Может я неправильно выразился. Нахера стандартизировать ЯП таким анальным стандартом? Неужели нет ничего получше?
                                  Ответить
                                  • i am a very baaaad boy
                                    Ответить
                                  • А, это чтобы хоть как-то организовать процесс стандартизации. У ИСО уже налаженый процесс, региональные организации, какой-никакой авторитет.
                                    Ответить
                                    • А зачем региональные организации? Как RFC без них обходится?
                                      Ответить
                                • Это наебалово какое-то, откровенно говоря. Я, как человек ни разу не открывающий стандарт, пошёл его гуглить. Откуда мне знать что нужно искать черновики?
                                  Ответить
                        • Ебануться. 1500 страниц!
                          Ответить
                • >С++ — набор языков для создания своего идеального говноязыка.

                  Да всё сведётся к какому-то абстрактному шаблонному лиспохаскелю с метушиными макросами и их реализацией для обратной поддержкой всей питушни начиная с 1970х.
                  Ответить
              • > миксины

                Въебал минус
                Ответить
          • >NSt7__cxx1112basic_stringIcSt11char_tra itsIcESaIcEEE

            Пиздец. Это внутри так обычная строка называется?
            Кресты пробивают дно за дном.
            Ответить
            • Она переименовывается так компилятором. Так она называется тоько в бинарнике. Типичный ГЦЦшный манглинг:
              N - имя в неймспейсах
              St - ::std:: - первая часть имени, использует специфическое сокращение
              7__cxx11 - inline namespace, используется в libstdc++ чтобы включать фичи С++11, когда надо. Гцц использует паскалестроки, длина в начале
              12basic_string - название собственно класса
              l - шаблонные параметры дальше, эквивалентно < в нормальном коде
              c - char, ещё одно сокращение гцц
              St - ::std::, опять
              11char_traits - имя класса char_traits
              l - начинаются шаблонные параметры
              c - char
              E - Закончилось описание предыдущего типа (char_traits)
              Sa - ::std::allocator - сокращение
              l - шаблонные параметры
              c - char
              E - закончилось описание allocator
              E - закончилось описание basic_string
              E - закончилось описание типа вообще.

              Как можно заметить - всё очень просто!
              Ответить

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