2012-01-04 75 views
8

llvm::Type 2.9和更早的版本曾用於有getDescription方法來檢索類型的字符串表示。這個方法在llvm 3.0中不再存在。llvm的字符串表示::類型結構

我不確定這是否被棄用而傾向於Type::print(raw_ostream&),但無論如何我很好奇這個API。關於如何使用它的例子有哪些?我怎樣才能轉儲到stringconst char*

特別是,我想將字符串傳遞給Boost::Format這是一個現代的C++ sprintf

回答

10

我想,你需要創建一個llvm::raw_string_ostream的實例,並將你的std :: string傳入它的construtor。現在你可以使用它作爲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 2015-05-07 00:33:16

+0

當前版本的LLVM需要引用,所以'&type_str'中的&不再需要了。 – arrowd 2015-05-07 14:51:34