Monday 15 August 2011

How to print an integral template argument at compile time in C++ -


कहते हैं मैंने इस तरह एक टेम्पलेट क्लास लागू किया है:

  टेम्पलेट & lt; size_t N & gt;  

मैं चाहता हूं कि जब भी कंपाइलर एक खंड की रचना करता है जैसे

  c & lt; 20 & gt; सी;  

यह एक संदेश मुद्रित करेगा

"वर्ग सी को एन = 20 के साथ templated है"

मैं ' #pragma और static_assert व्यर्थ में करने की कोशिश की है।

समस्या यह है कि #pragma और static_assert के साथ, मैं एक संदेश में एक अभिन्न (20 यहाँ) एम्बेड नहीं कर सका ;

  • प्रीप्रोसेसरों के साथ, यह बहुत जल्दी है कि N को 20 के साथ प्रतिस्थापित नहीं किया गया है।
  • क्या कोई तरीका है या कोई रास्ता नहीं?

    धन्यवाद।

    आप एक पोस्ट-बिल्ड चरण जोड़ सकते हैं जो आउटपुट द्विआधारी के भीतर सभी संकलन के बाद सभी बाध्यता प्राप्त करता है टेम्पलेट पूर्ण हैं I उदाहरण के लिए, जीएनयू टूलचैन का उपयोग करके आप यह कर सकते हैं:

      बनाओ एनएम एफू | C ++ filt | Grep 'C & lt; [^ & gt;] \ + & gt; :: f'  

    जहां foo आउटपुट बाइनरी का नाम है।

    < P> नियमित रूप से अभिव्यक्ति को स्पष्ट रूप से टेम्पलेट इंस्टीटियेशन्स ढूंढने के लिए बदलना होगा, लेकिन यह उदाहरण आपके उदाहरण class C के लिए काम करता है।

    आप भी बहुत उपयोग कर सकते हैं किसी भी प्रकार के सभी टेम्पलेट इंस्टीटयेशन्स को ढूंढने के लिए विस्तृत regex:

      grep '& lt; [^ & gt;] \ + & gt; ::'  < / Pre> 

    यह संयोग से यह स्पष्ट करने का एक शानदार तरीका है कि एसटीएल या आईओस्ट्रीम पुस्तकालयों के प्रयोग से प्रतीत होता है कि छोटे प्रोग्राम भी ब्लोट करते हैं। टेम्पलेट इंस्टाशन की संख्या वास्तव में आश्चर्यजनक हो सकती है!


    No comments:

    Post a Comment