मेरे पास एक टेम्पलेट है जो मैं तर्क के प्रकार के आधार पर सशर्त रूप से संकलित करना चाहता हूं। मुझे केवल "सादा पुराना डेटा" (पीओडी), यानी, पूर्णांक, आदि या वर्ग/structs के बीच अंतर करने की परवाह है। मैं विंडोज़ पर सी ++ वीएस 2008 का उपयोग कर रहा हूं।बूस्ट प्रकार-लक्षणों का उपयोग कर सशर्त संकलन
template<T>
class foo
{
void bar(T do_something){
#if IS_POD<T>
do something for simple types
#else
do something for classes/structs
#endif
}}
मैं बूस्ट लाइब्रेरी को देख रहा हूं और मैं देख सकता हूं कि वे जो चाहते हैं वह प्रतीत होता है। हालांकि, मुझे समझ में नहीं आता कि #if
कथन के लिए सही वाक्यविन्यास क्या होगा।
किसी भी मदद की सराहना की जाएगी।
संपादित करें --- प्रतिक्रियाओं पढ़ने के बाद, मैं देख रहा हूँ मैं प्रश्न के अपने परिभाषा कुछ अनदेखी की। कक्षा foo
एक टेम्पलेटेड क्लास है जिसे केवल bar
के संस्करण को उदाहरण देने की आवश्यकता है जो class type T
के लिए सही है। मैं एक ऐसे समाधान की तलाश में था जिसे संकलन समय का समाधान किया जा सके। उम्मीद है कि यह मेरी समस्या को साफ़ करता है।
यह एक संकलन त्रुटि, एक बार वर्ग टेम्पलेट, instantiated है 'T' तय हो गई है हो जाएगा, और उस बिंदु पर आप' फोन bar' यह दो परिभाषा देखेंगे करने का प्रयास करते हैं और इसे संकलित करने के लिए असफल हो जायेगी उनमें से एक। ध्यान दें कि यह SFINAE नहीं है, क्योंकि यह प्रतिस्थापन विफलता नहीं होगी - प्रकार को सदस्य के तत्कालता से पहले तय किया गया है (या इसलिए मुझे लगता है, मैं इन चीजों के साथ कभी भी निश्चित नहीं हूं :))। –