सामान्य रूप से पूरे कोड को आउटपुट करना संभव नहीं है। लेकिन जो मुझे बेहद दिलचस्प लगता है, वह आपको प्रकार दिखाने के लिए विजुअल सी ++ डीबगर का उपयोग करने की क्षमता है। उस साधारण मेटा-प्रोग्राम को लें:
template<class Head, class Tail>
struct type_list
{
typedef Head head;
typedef Tail tail;
};
struct null_type
{};
template<class List>
struct list_head
{
typedef typename List::head head;
};
template<class List>
struct list_tail
{
typedef typename List::tail tail;
};
template<class List>
struct list_length
{
static const size_t length = 1+list_length< typename list_tail<List>::tail >::length;
};
template<>
struct list_length<null_type>
{
static const size_t length = 0;
};
int main()
{
typedef
type_list
< int
, type_list
< double
, type_list
< char
, null_type
>
>
> my_types;
my_types test1;
size_t length=list_length<my_types>::length;
list_head<list_tail<list_tail<my_types>::tail>::tail>::head test2;
}
मैंने बस अपने मेटा-प्रकारों को तुरंत चालू किया। ये अभी भी खाली सी ++ वर्ग उदाहरण हैं जो कम से कम 1 बाइट लंबे हैं। अब मैं test2 के अंतिम इन्स्टेन्शियशन के बाद एक ब्रेकप्वाइंट रख दिया और देखते हैं, जो प्रकार/मूल्यों लंबाई, test1 test2 और के हैं कर सकते हैं:
यहाँ डिबगर से पता चलता है:
length 3 unsigned int
test1 {...} type_list<int,type_list<double,type_list<char,null_type> > >
test2 -52 'Ì' char
अब तुम क्या आप जानते हैं सिर ने आपको एक चरित्र वापस कर दिया, आपकी सूची में int, double, char शामिल है और null_type द्वारा समाप्त किया गया है।
इससे मुझे बहुत मदद मिली। कभी-कभी आपको वास्तव में गन्दा प्रकार को एक टेक्स्ट एडिटर में कॉपी करने और इसे एक पठनीय रूप में प्रारूपित करने की आवश्यकता होती है, लेकिन इससे आपको पता लगाने की संभावना मिलती है कि अंदर क्या है और इसकी गणना कैसे की जाती है।
आशा है कि मदद करता है,
Ovanes
नहीं, लेकिन यह होना चाहिए। किसी को इसे क्लैंग प्रोजेक्ट के रूप में करना चाहिए: डी –
ध्यान दें कि [SFINAE] (https://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error) के कारण जो कोड आप प्रत्येक टेम्पलेट को बस कुछ हार्ड-कोड किए गए विकल्प के साथ बदलकर प्राप्त करेंगे संभवतः अवैध होगा। जैसे जब तक इसे कभी नहीं कहा जाता है, तब तक एक टेम्पलेट वर्ग की एक विधि अच्छी तरह से उन चीज़ों को कॉल कर सकती है जो मौजूद नहीं हैं। – MvG
@ जोसेफ गारविन इस समय के लिए एक क्लैंग-आधारित परियोजना है। [टेम्पलाइट, क्लैंग-आधारित टेम्पलेट इंस्टेंटेशन प्रोफाइलर और डीबगर] का नवीनतम सक्रिय संस्करण (https://github.com/mikael-s-persson/templight), [टेम्पलर विज़ुअलाइज़र] (https://github.com/ schulmar/टेम्पलर), साथ ही साथ [मेटाशेल] (https://github.com/sabel83/metashell)। –