Derleyiciniz bir derleme hatası üretir çünkü derleyici, T
'un tek bir dize parametresi alan Add
adlı bir yönteme sahip olduğunu bilmez.
Delphi'deki genel türlerin yalnızca genel işleve eklendiğini düşünmüştüm, bu nedenle yalnızca bir Add (string) yöntemine sahip olmayan bir türle kullanılırsa hata verir.
Smalltalk veya C++ şablonlarını kullanıyorsanız, varsayımınız doğru olur. Ancak, jenerikler şablonlarla aynı değildir. Jenerikler için tip parametresine bir kısıtlama uygulamanız gerekir. Kısıtlayıcı, derleyiciye T
özelliklerinin sahip olması gerektiğini söylemelidir. Örneğin, uygun bir Add
yöntemine sahip bir sınıftan türetilmek üzere T
kısıtlayabilirsiniz. Ya da uygun bir Add
yöntemiyle bir arayüz uygulamak için T
'u sınırlayabilirsiniz. Delphi jenerik kısıtlamaları için
Belgeler linki: http://docwiki.embarcadero.com/RADStudio/en/Constraints_in_Generics
uygulanabilir jenerik kısıtlamalar oldukça sınırlıdır, bir utanç şeydir. Örneğin, belirli matematiksel operatörlere sahip olmak için bir türü kısıtlayabilmeyi çok isterim. Örneğin, bir türünü +
ve -
işleçlerine sahip olacak şekilde kısıtlamak istiyorum. Bununla birlikte, hem jenerik hem de şablonlar için artıları ve eksileri vardır ve bu yüzden bu sınırlamaların Delphi dil tasarımcılarının haklı bir tasarım kararının sonucu olduğunu kabul ediyorum.
Yukarıdakileri yapmak istememin nedeni, temel sınıfı (veya arabirimi) paylaşmayan iki sınıf olduğudur, ancak bazı yöntem imzaları tam olarak aynıdır. Sınırlı kısıtlamalarla bu mümkün değil sanırım? – monoceres
Bu doğru. Bunlar şablonlar olsaydı, iyi olursun. Ama sadece jeneriklerle şanstan yoksun. Hem skaler hem de karmaşık değerlerde çalışabilen güzel matematiksel algoritmalar yazmamı durduran aynı soruna girdiniz. –
Bu çok kötü :(Ben RTTI ve if deyimleri (blersh) dönmek zorunda sanırım. – monoceres