podría alguien decirme sobre algunos ejemplos prácticos sobre el uso de secuencias de cadenas en C++, es decir, la entrada y la salida a una secuencia de cadenas mediante la inserción de flujo y operadores de extracción de flujo?C++: ¿qué beneficios ofrecen los flujos de cadenas?
Respuesta
Puede utilizar las corrientes de cuerda para convertir cualquier cosa que implementa operator <<
en una cadena:
#include <sstream>
template<typename T>
std::string toString(const T& t)
{
std::ostringstream stream;
stream << t;
return stream.str();
}
o incluso
template <typename U, typename T>
U convert(const T& t)
{
std::stringstream stream;
stream << t;
U u;
stream >> u;
return u;
}
Solo recuerde que esta solución solo funcionará para tipos primitivos y versiones sobrecargadas de 'operator <<' con clases específicas. – fogo
@fogo: Y dado que es relativamente común definir operadores de transmisión para las clases, eso no es tan importante. –
@Martin York De hecho, acabo de considerar un comentario adecuado teniendo en cuenta la frase * convertir cualquier cosa * en la respuesta. – fogo
Además de las ventajas es que hay one point to carefully consider si utiliza gcc 4.3.1. No revisé las versiones anteriores de gcc.
Esto era una limitación de una implementación específica (gcc). Si sigue el enlace hasta el error bugzilla asociado con el problema, también notará que el error ha sido marcado resuelto
¡Entonces es genial! Editaré mi publicación para agregar información sobre qué información es relevante solo para algunas versiones de gcc. –
Se pueden usar en cualquier lugar donde se pueda utilizar una transmisión normal.
Por lo tanto, en situaciones en las que estaba leyendo un archivo, podría leer de una secuencia de cadenas.
void compile(std::istream& str)
{
CPlusPlusLexer lexer(str);
CPlusPlusParser parser(lexer);
BackEnd backend(parser);
backend.compile();
}
int main()
{
std::fstream file("Plop.cpp");
compile(file);
std::stringstream test("#include <iostream>\n int main() { std::cout << \"H World\n\";}");
compile(test);
}
I ellos utilizan principalmente como buffers de memoria, en la creación de mensajes:
if(someVector.size() > MAX_SIZE)
{
ostringstream buffer;
buffer << "Vector should not have " << someVector.size() << " eleements";
throw std::runtime_error(buffer.str());
}
o para construir cadenas complejas:
std::string MyObject::GenerateDumpPath()
{
using namespace std;
std::ostringstream dumpPath;
// add the file name
dumpPath << "\\myobject."
<< setw(3) << setfill('0') << uniqueFileId
<< "." << boost::lexical_cast<std::string>(state)
<< "_" << ymd.year
<< "." << setw(2) << setfill('0') << ymd.month.as_number()
<< "." << ymd.day.as_number()
<< "_" << time.hours()
<< "." << time.minutes()
<< "." << time.seconds()
<< ".xml";
return dumpPath.str();
}
Es útil porque trae toda la extensibilidad de std::stream
s para usar los búferes de caracteres (la compatibilidad con la extensibilidad y las configuraciones locales de ostreams, la administración de la memoria de búfer está oculta, etc.).
Otro ejemplo que he visto fue el informe de errores en la biblioteca gsoap, mediante la inyección de dependencias:. soap_stream_fault toma un parámetro ostream & reportar mensajes de error en
Si lo desea, puede pasar que std :: cerr std :: cout o una implementación std :: ostringstream (la uso con una implementación std :: ostringstream).
- 1. ¿Qué agentes en línea ofrecen API?
- 2. Prototipo vs. No, ¿qué son los beneficios?
- 3. ¿Qué DBMS ofrecen tablas organizadas por índice?
- 4. ¿Qué tan cerca están los flujos de entrada de Java?
- 5. los beneficios de awakeFromNib?
- 6. ¿Beneficios de los bloques de scoping?
- 7. Los beneficios de JavaScript Prototype
- 8. C# - ¿Cuáles son los beneficios de las clases "parciales"?
- 9. ¿Por qué usar c cadenas en C++?
- 10. ¿Los diferentes fabricantes de ARM ofrecen diferentes conjuntos de instrucciones?
- 11. ¿Cuáles son los beneficios de Java?
- 12. ¿Cuáles son los mayores beneficios de LLVM?
- 13. ¿Cuáles son los beneficios de corutinas?
- 14. Singleton flujos seguros eficiente en C++
- 15. ¿Por qué los desarrolladores .NET ofrecen versiones de 32 bits/64 bits de ensamblados .NET?
- 16. Beneficios de matrices
- 17. ¿Beneficios de pelar los espacios blancos posteriores?
- 18. ¿Cuáles son los beneficios de JRebel?
- 19. ¿Qué bibliotecas ofrecen métodos NLP básicos o avanzados?
- 20. cadenas de C++, ¿cuándo usar qué?
- 21. ¿Cuáles son los verdaderos beneficios de ExpandoObject?
- 22. ¿En qué condiciones los objetos jQuery encadenados ofrecen mejoras de rendimiento?
- 23. ¿Cuáles son los beneficios de letrec?
- 24. ¿Cuáles son los beneficios de usar C# frente a F # o F # frente a C#?
- 25. ¿Por qué se ofrecen DHCP Offer y Ack?
- 26. ¿Cuáles son los beneficios de Persistence Ignorance?
- 27. ¿Cuáles son los beneficios de JCA?
- 28. ¿Cuáles son los beneficios de Scala?
- 29. ¿Cuáles son los beneficios de usar WCF?
- 30. ¿Cuáles son los beneficios de la covarianza y la contravarianza?
¿Quieres decir cin y cout? ¿A diferencia de C-style getc y printf? –
@Vanessa: OP probablemente significa 'std :: stringstream', (' #include ') –
Bill
@Bill: sí, me refiero a esto! –