2012-01-04 15 views
8

llvm::Type 2.9 y anterior solía tener el método getDescription para recuperar una representación de cadena del tipo. Este método ya no existe en llvm 3.0.representación de cadena de llvm :: Tipo de estructura

No estoy seguro si esto está obsoleto a favor de Type::print(raw_ostream&), pero en cualquier caso tengo curiosidad de esta API. ¿Qué ejemplos hay sobre cómo usarlo? ¿Cómo puedo realizar un volcado a string o const char*?

En particular, quiero pasar la cadena a Boost::Format que es un C++ moderno sprintf.

Respuesta

10

Supongo que necesitas crear una instancia de llvm::raw_string_ostream y pasar tu std :: string a su construtor. Ahora puede usarlo como llvm::raw_ostream y cuando haya terminado, simplemente llame al .str() para obtener su cadena.

Algo así:

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

LLVM ha cambiado su interfaz, por lo que ahora el siguiente trabajo:

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

Lo siento por la reactivación de este hilo después de tanto tiempo, pero no debemos pasar sólo 'type_str' en lugar de' & type_str' en la segunda línea? (En llvm-3.4 da un error al pasar usando '& type_str') – sraok

+0

Derecha, la versión actual de LLVM toma una referencia, por lo que un' & 'en' & type_str' ya no es necesario. – arrowd

Cuestiones relacionadas