में ifdef की मैं एक सी ++ वर्ग के अंदर निम्नलिखित कोड है:टर्निंग # सी में एक टेम्पलेट metaprogram ++
class Features
{
#define Feature_Size_A 12345
#define Feature_Size_B 45678
#define Feature_Size_C 78901
//#define Feature_Size_D 14725
const int Feature_Sum = 0
#ifdef Feature_Size_A
+ Feature_Size_A
#endif
#ifdef Feature_Size_B
+ Feature_Size_B
#endif
#ifdef Feature_Size_C
+ Feature_Size_C
#endif
#ifdef Feature_Size_D
+ Feature_Size_D
#endif
;
#ifdef Feature_Size_A
static float Feature_A[Feature_Size_A];
#endif
#ifdef Feature_Size_B
static float Feature_B[Feature_Size_B];
#endif
#ifdef Feature_Size_C
static float Feature_C[Feature_Size_C];
#endif
#ifdef Feature_Size_D
static float Feature_D[Feature_Size_D];
#endif
};
मैं सुविधाओं की टिप्पणी करने के लिए, लाइन 4 की तरह, संकलन और विभिन्न परीक्षण चलाने के लिए इस्तेमाल किया। लेकिन अब मैं कक्षा को एक टेम्पलेट के रूप में रखना चाहता हूं, इसलिए मैं एक ही कार्यक्रम में चालू या बंद विभिन्न सुविधाओं के साथ कई संस्करणों को तुरंत चालू कर सकता हूं।
मैं कुछ इस तरह की सोच रहा हूँ:
template <bool Feature_A, bool Feature_B, bool Feature_C, bool Feature_D>
class Features
{
...
};
Features<true, true, true, false> f;
मैं बढ़ावा :: एमपीएल के साथ करने की कोशिश की: वेक्टर के लेकिन मैं कठोरता से संघर्ष कर रहा हूँ।
बीटीडब्ल्यू: यह पूरा कोड नहीं है। मूल कोड में 25 विशेषताएं हैं।
मैं मैक्रो को शामिल नहीं :-)
सुविधाओं का उपयोग कैसे किया जाता है? क्या वे 'फीचर्स' क्लास के बाहर से पहुंचे हैं? क्या उन्हें किसी विशिष्ट नाम से सुलभ होना चाहिए, या अनुक्रमित पहुंच स्वीकार्य है? क्या वे सभी अरणें तैरते हैं? –