यह आप सामान्य वर्ग में एक नेस्टेड प्रकार के रूप में एक सूचक प्रकार की घोषणा करने की जरूरत है ऐसा करने के लिए :
type
TMyGeneric<T> = record
type
P = ^T;
public
class procedure DoStuff(tPtr: P); static;
end;
var
int: Integer;
...
TMyGeneric<Integer>.DoStuff(@int);
या एक वर पैरामीटर का उपयोग:
type
TMyGeneric<T> = record
public
class procedure DoStuff(var a: T); static;
end;
यह recor उपयोग करने के लिए आम हो रहा है सामान्य प्रकार के वर्गों के बजाय डीएस जो तत्काल नहीं मिलता है।
अंत में, आपके पास क्लास जेनेरिक बनाने के बिना एक सामान्य विधि डेल्फी में नहीं हो सकता है।
:
Thorsten के जवाब से पता चलता वर्ग सामान्य बनाने के बिना एक सामान्य विधि को लागू करने के लिए कैसे, कि ++ टेम्पलेट कोड निम्नलिखित सी की की डेल्फी एनालॉग है: दूसरे शब्दों में निम्नलिखित सी ++ टेम्पलेट कोड का कोई अनुरूप है
class C {
public:
template <typename T>
int SomeTemplateFunction(T* data) {
printf("Address of parameter is %p\n", data);
return 0;
}
};
int a;
char c;
C cinst;
cinst.SomeTemplateFunction<int>(&a);
cinst.SomeTemplateFunction<char>(&c);
थॉर्स्टन का उत्तर आपको कक्षा का कार्य देता है लेकिन टिप्पणियों में आप कहते हैं कि आप एक सामान्य सदस्य फ़ंक्शन की तलाश में हैं।
type
TMyClass = class
public
procedure DoStuff<T>(var a: T);
end;
procedure TMyClass.DoStuff<T>(var a: T);
begin
end;
...
var
instance: TMyClass;
i: Integer;
s: string;
...
instance.DoStuff<Integer>(i);
instance.DoStuff<string>(s);
हालांकि, क्या मैं के साथ संघर्ष कर रहा हूँ कैसे वास्तव में तुम बहुत डेल्फी में, इस के साथ उपयोगी कुछ भी, कि बस के रूप में प्रभावी रूप से एक सामान्य समाधान के बिना नहीं किया जा सकता है कर सकता है।
मैं किसी भी सुझाव की सराहना करता हूं और उन्हें समायोजित करने के उत्तर को संपादित करने में प्रसन्नता होगी।
स्रोत
2011-03-17 19:54:14
@ डेविड: क्या आप वाकई यही एकमात्र तरीका है? एकमात्र कारण मैंने फ़ंक्शन को एक क्लास फ़ंक्शन बनाया है, इसलिए मैं जेनिक्स का उपयोग कर सकता हूं, और मैं कक्षा के उपयोगकर्ता को प्रत्येक अलग-अलग प्रकार के लिए कक्षा का एक नया उदाहरण बनाना नहीं चाहता हूं, जिसके साथ वह फ़ंक्शन का उपयोग करना चाहता है। वास्तव में, एक आवश्यकता यह है कि उपयोगकर्ता एक ही फ़ंक्शन का उपयोग कक्षा के उसी उदाहरण पर विभिन्न प्रकार के मानकों के साथ कर सकता है। यदि यह वास्तव में एकमात्र तरीका है, तो यह डेल्फी की दिमागी सीमा है। – Hal
@ डेविड मेरे पास इस समस्या का एक और उदाहरण है जहां यह कक्षा विधि नहीं हो सकता है। उपर्युक्त टिप्पणी में कृपया मेरे प्रश्न का उत्तर दें। – Hal
@ हॉल मैंने इसका उत्तर दिया है। अपडेट किए गए उत्तर के दूसरे कोड खंड में आपके पास जेनेरिक प्रकार का उदाहरण कभी नहीं होगा। आप इसे 'MyGeneric कहते हैं। डॉस्टस्ट (@int);' यह थोड़ा सा शब्द है, लेकिन यह वही है जो आप इसे करते हैं। –