एक वैकल्पिक safe_data
टेम्पलेट, यानी इस तरह कुछ करने के लिए है :
import std.stdio;
import std.traits;
void safe_data(T)(in T arr) {
static if(isArray!T) {
writeln("Length ", arr.length); // do some ugly stuff for whole array
foreach(e; arr) safe_data(e); // recursively go deeper
} else {
writeln("Element ", arr); // do more ugly stuff on individual elements
}
}
void main() {
writeln("A");
int[3] A = [1,2,3];
safe_data(A);
writeln("B");
int[3][2] B = [[1,2,3],[4,5,6]];
safe_data(B);
}
क्या आप डेटा के साथ क्या करना चाहते हैं पर निर्भर करता है, तो आप in
पर बजाय ref
उपयोग करने के लिए चाहते हो सकता है। बीटीडब्ल्यू, यदि आप चाहें, तो आप static if
को फ़ंक्शन के बाहर ले जा सकते हैं जो कभी-कभी क्लीनर कोड बनाता है:
// handle arrays
void safe_data(T)(in T arr) if(isArray!T) {
writeln("Length ", arr.length); // do some ugly stuff for whole array
foreach(e; arr) safe_data(e); // recursively go deeper
}
// handle array elements
void safe_data(T)(in T e) if(!isArray!T) {
writeln("Element ", e); // do more ugly stuff on individual elements
}
बस जो मैं ढूंढ रहा था! मैं अच्छी तरह से टेम्पलेट्स को समझ नहीं पा रहा हूं लेकिन आपका उदाहरण बहुत स्पष्ट है। –
@ पेड्रो: आपका स्वागत है। यदि आप डेटा को क्रमबद्ध करना चाहते हैं, तो ऑरेंज (http://www.dsource.org/projects/orange) एक नज़र के लायक हो सकता है। – stephan