टेम्पलेट मेटाप्रोग्राम (टीएमपी) को देखते हुए, क्या सी ++ कंपाइलर्स बिल्ड आंकड़े तैयार करते हैं जो तत्काल कक्षाओं की संख्या को गिनते हैं? या क्या इस नंबर को स्वचालित रूप से प्राप्त करने का कोई और तरीका है? तो उदाहरण के लिए obiquitous भाज्यएक टीएमपी में तत्काल कक्षाओं की संख्या को स्वचालित रूप से गिनें?
#include <iostream>
template<int N> struct fact { enum { value = N * fact<N-1>::value }; };
template<> struct fact<1> { enum { value = 1 }; };
int main()
{
const int x = fact<3>::value;
std::cout << x << "\n";
return 0;
}
मैं वापस पाने के लिए चाहते हैं नंबर 3 (वास्तव बाद से < 3>, वास्तव < 2>, और यह तथ्य < 1> instantiated कर रहे हैं)। यह उदाहरण निश्चित रूप से मामूली है, लेकिन जब भी आप उपयोग करना शुरू करते हैं उदा। Boost.MPL, संकलन समय वास्तव में विस्फोट, और मैं जानना चाहता हूं कि इसमें से कितना छुपा वर्ग तात्कालिकता के कारण है। मेरा सवाल मुख्य रूप से विजुअल सी ++ के लिए है, लेकिन जीसीसी के उत्तर भी सराहना की जाएगी।
संपादित: विज़ुअल सी के लिए ++ स्टीफ़न टी Lavavej के videos/d1reportAllClassLayout में से एक से संकलन स्विच जोड़ने और एक ग्रेप + शब्द आउटपुट फ़ाइल पर भरोसा कर रही है, लेकिन यह (क) बढ़ जाती है संकलन है मेरे वर्तमान बहुत भंगुर दृष्टिकोण बार बार और (बी) regex 100% सही पाने के लिए मुश्किल है।
+1। मैंने सुझाव दिया कि किसी भी ओपन सोर्स कंपाइलर को हैक करना बहुत आसान होना चाहिए, लेकिन आप वास्तव में इसे सबसे अच्छे तरीके से साबित कर सकते हैं (एक पैच लिखकर जो वास्तव में करता है)। – abarnert
धन्यवाद! क्या होगा (हां, गुंजाइश आ रहा है!) सभी वर्ग टेम्पलेट्स का एक लॉग है और कुल तात्कालिकताओं की कुल संख्या या पूरी सूची की बजाय उनके तत्काल की संख्या है। शायद पूर्ण बिल्ड लॉग को पोस्ट-प्रोसेस करने के लिए एक पर्ल स्क्रिप्ट वह है जो मुझे कोशिश करनी चाहिए। – TemplateRex
आउटपुट को 'awk -F' <'' {टेम्पलेट्स [$ 1] ++} END {टेम्पलेट्स में टी के लिए प्रिंट करें, प्रिंट टी, टेम्पलेट्स [टी]} ' –