Я делал сравнение между С++ и 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. Правильно ли я?