Разница с шаблонами C ++ заключается в том, что в C ++ компилятор просто заменяет типы шаблонов для создания новых специализированных типов, новых функций и т. Д. c.
Таким образом, X и X заканчиваются это два новых класса, в то время как в Kotlin есть только один класс X, и, кроме того, в Kotlin во время выполнения стираются универсальные типы c (ie во время выполнения Integer и Double просто исчезают, они нужны только компилятором). Здесь C ++ просто создает класс Complex и использует его.
В Kotlin проблема здесь заключается в том, что сложение заканчивается тем, что оно является операцией сложения, которая должна знать, является ли она добавлением long , из поплавков, et c. А поскольку универсальные c типы удалены, и существует только один сложный класс, он должен обрабатывать все возможности. Таким образом, ваш код должен быть изменен для обработки каждого такого случая. Или по умолчанию для одного типа, как это:
class Complex<T: Number>(val real:T, val imagine:T) {
fun add(o: Complex<T>): Complex<Double> {
var r = real.toDouble() + o.real.toDouble()
var i = imagine.toDouble() + o.imagine.toDouble()
return Complex(r, i)
}
}
или
fun<T:Number> add_complex(l:Complex<T>, r:Complex<T>): Complex<Double> {
return Complex(l.real.toDouble() +r.real.toDouble(), l.imagine.toDouble()+r.imagine.toDouble())
}