Я делал сравнение между С++ и Delphi, и я нашел для меня что-то сложное.
Это очень простой код на С++:
template<typename T>
class C {
class D {
T x;
}
}
В этом сценарии мы имеем, что класс C
является классом шаблона (= общий класс), а вложенный класс D
также является классом шаблона. Если T
является double
, x
внутри D
равно double
.
Я не могу сказать этого:
template<typename T>
class C {
template<typename T>
class D {
T x;
}
}
Это ошибка, так как я уже "внутри" C
, а другой T
будет конфликтом. Чтобы исправить ошибку, я должен использовать другое имя, например U
.
template<typename T>
class C {
template<typename U>
class D {
T x;
}
}
В Delphi я мог бы написать это:
type
TClassC<T> = class
private
type
TClassD = class
private
x: T;
end;
end;
Если T
является integer
, теперь x
является integer
, поскольку (из того, что я понял, читающего онлайн) TClassD
- integer
. В Delphi это также законно:
type
TClassC<T> = class
private
type
TClassD<T> = class // <-- note the <T> repeated!!
private
x: T;
end;
end;
Что теперь? Если я могу снова объявить T
в TClassD
, это означает, что без <T>
у меня будет не общий класс TClassD
. Правильно ли я?