2012-01-04 8 views
8

llvm::Type 2.9 और पहले इस प्रकार के स्ट्रिंग प्रस्तुति को पुनर्प्राप्त करने के लिए getDescription विधि का उपयोग किया जाता था। यह विधि अब llvm 3.0 में मौजूद नहीं है।llvm का स्ट्रिंग प्रतिनिधित्व :: टाइप स्ट्रक्चर

मुझे यकीन नहीं है कि यह Type::print(raw_ostream&) के पक्ष में बहिष्कृत है, लेकिन किसी भी मामले में मैं इस एपीआई से उत्सुक हूं। इसका उपयोग कैसे करें इसके बारे में क्या उदाहरण हैं? मैं string या const char* पर कैसे डंप कर सकता हूं?

विशेष रूप से, मैं स्ट्रिंग को Boost::Format पर पास करना चाहता हूं जो एक आधुनिक सी ++ sprintf है।

उत्तर

10

मुझे लगता है, आपको llvm::raw_string_ostream का एक उदाहरण बनाने की आवश्यकता है और अपने std :: स्ट्रिंग को इसके कंस्ट्रूटर में पास करना होगा। अब आप इसे llvm::raw_ostream के रूप में उपयोग कर सकते हैं और जब आप कर लेंगे तो अपनी स्ट्रिंग प्राप्त करने के लिए बस .str() पर कॉल करें।

कुछ इस तरह:

std::string type_str; 
llvm::raw_string_ostream rso(&type_str); 
your_type->print(rso); 
std::cout<<rso.str(); 

LLVM इसके इंटरफेस बदल गया है, तो अब निम्नलिखित काम करेगा:

std::string type_str; 
llvm::raw_string_ostream rso(type_str); 
your_type->print(rso); 
std::cout<<rso.str(); 
+0

इतने लंबे समय के बाद इस सूत्र को पुनर्जीवित करने के लिए खेद है, लेकिन हम अभी पारित नहीं करना चाहिए दूसरी पंक्ति में 'type_str' के बजाय' type_str'? (Llvm-3.4 में यह 'और type_str' का उपयोग करके गुजरने में त्रुटि देता है) – sraok

+0

दाएं, एलएलवीएम का वर्तमान संस्करण एक संदर्भ लेता है, इसलिए' और 'टाइप_स्ट्र' में' और 'की आवश्यकता नहीं है। – arrowd

संबंधित मुद्दे