- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 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)
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 - там можно будет.
В итоге у нас будет сколько языков в одном? Сейчас есть: С-с-классами, препроцессор, шаблонная метушня, язык описания концептов, добавят ещё рефлексию (со своим синтаксисом) и метаклассы. С++ — набор языков для создания своего идеального говноязыка.
Может его хоть прочитать будет реально... А то сейчас только корейские задроты могут полностью прочесть и осознать стандарт.
Полностью прочесть - это возможно.
Но вот "полностью осознать", это сможет только великий дзенский мудрец. Всю жизнь он будет курить Святой Стандарт в попытках полностью осознать Его божественность.
А то вот нашёл, его ещё покупать надо https://www.iso.org/standard/68564.html О_О
http://wg21.link/standard
http://wg21.link/
Переписать на питоне?
Да всё сведётся к какому-то абстрактному шаблонному лиспохаскелю с метушиными макросами и их реализацией для обратной поддержкой всей питушни начиная с 1970х.
Въебал минус
Пиздец. Это внутри так обычная строка называется?
Кресты пробивают дно за дном.
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 - закончилось описание типа вообще.
Как можно заметить - всё очень просто!