2012-01-04 32 views
8

llvm::Type 2.9 và trước đó đã sử dụng phương thức getDescription để truy xuất biểu diễn dạng chuỗi. Phương thức này không tồn tại nữa trong llvm 3.0.biểu diễn chuỗi của llvm :: Cấu trúc loại

Tôi không chắc chắn điều này có bị phản đối vì lợi ích của Type::print(raw_ostream&) hay không, nhưng trong mọi trường hợp tôi đều tò mò về API này. Ví dụ nào về cách sử dụng? Làm thế nào tôi có thể đổ vào một số string hoặc const char*?

Cụ thể, tôi muốn chuyển chuỗi đó tới Boost::Format là một C++ sprintf hiện đại.

Trả lời

10

Tôi giả sử, bạn cần phải tạo một phiên bản llvm::raw_string_ostream và chuyển chuỗi std :: của bạn vào chuỗi construtor. Bây giờ bạn có thể sử dụng nó như llvm::raw_ostream và khi bạn thực hiện xong, chỉ cần gọi .str() để nhận chuỗi của bạn.

Something như thế:

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

LLVM đã thay đổi giao diện của nó, vì vậy bây giờ những điều sau đây sẽ làm việc:

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

Xin lỗi vì làm sống lại chủ đề này sau rất lâu, nhưng không nên chúng tôi chỉ cần vượt qua 'type_str' thay vì' & type_str' trong dòng thứ hai? (Trong llvm-3.4 nó đưa ra một lỗi khi đi qua sử dụng '& type_str') – sraok

+0

Phải, phiên bản hiện tại của LLVM có tham chiếu, do đó,' & 'trong' & type_str' không cần thiết nữa. – arrowd

Các vấn đề liên quan