विकिपीडिया उदाहरण वास्तव में बहुत सरल है:
template Factorial(ulong n)
{
static if(n < 2)
const Factorial = 1;
else
const Factorial = n * Factorial!(n - 1);
}
यह एक विशिष्ट व्यक्ति-विषयक टेम्पलेट (नीचे जोनाथन की टिप्पणी देखें)। n
टेम्पलेट पैरामीटर है। तो, यदि आपने इसके बजाय लिखा था:
template Factorial(ulong n)
{
if(n < 2) // NOTE: no static here
const Factorial = 1;
else
const Factorial = n * Factorial!(n - 1);
}
? - यह काम नहीं करेगा। http://dpaste.dzfl.pl/3fe074f2 देखें। कारण यह तथ्य है कि अगर स्थिर और "सामान्य" अलग-अलग अर्थशास्त्र हैं। static if
एक असाइनमेंट अभिव्यक्ति लेता है (http://dlang.org/version.html, खंड "स्टेटिक अगर") जिसका मूल्यांकन संकलित समय पर किया जाता है, जबकि सामान्य अगर रन-टाइम पर मूल्यांकन किया जाता है तो सामान्य होता है।
Static if
एमिलियो द्वारा वर्णित "सशर्त संकलन" करने का एक ही तरीका है। डी में version
कीवर्ड भी है। तो एमिलियो का पहला सशर्त संकलन उदाहरण (जो डी में काम नहीं करता है) की तरह कुछ हो जाता है:
version (XXX) {
// XXX defined
} else {
// XXX not defined
}
आप अगर इस के लिए, आप की तरह कुछ लिखते थे स्थिर उपयोग करना चाहते हैं:
enum int XXX = 10;
static if (XXX == 10) {
pragma(msg, "ten");
}
नहीं मिला वास्तव में आप क्या उम्मीद कर रहे हैं, कृपया समस्या का विस्तार करें –
यह कैसे सी ++ टैग किया गया है? –
@ आर। मार्टिनो फर्नांडीस जो मुझे पता है उससे सी ++ – coredump