2010-06-06 24 views
10

¡Hola! Mi problema se puede describir de la siguiente manera:C++ - Implementación de mi propia secuencia

tengo algunos datos que en realidad es una matriz y podría ser representado como char* data con un poco de size

también tengo algo de código heredado (función) que lleva algún Resumen std::istream Objeto como un param y utiliza esa secuencia para recuperar datos para operar.

Entonces, mi pregunta es la siguiente: ¿cuál sería la manera más fácil de asignar mi data a algún objeto std::istream para poder pasarlo a mi función? Pensé en crear un objeto std::stringstream desde mi data, pero eso significa que copiar y (como supongo) no es la mejor solución.

Alguna idea de cómo se podría hacer para que mi std::istream funcione en el data directamente?

Gracias.

Respuesta

10

Si está buscando realmente crear su propia transmisión, me gustaría ver la biblioteca Boost.Iostreams. Hace que sea fácil crear tus propios objetos de transmisión.

+0

Y, IIRC, ya cuenta con el pegamento para tirar cosas fuera de un std :: vector o una matriz. – Thanatos

2

uso corriente cadena:

#include <sstream> 

int main() 
{ 
    char[] data = "PLOP PLOP PLOP"; 
    int  size = 13; // PS I know this is not the same as strlen(data); 

    std::stringstream stream(std::string(data, size)); 

    // use stream as an istream; 
} 

Si quieres ser real eficiente se puede ensuciar con el tampón corriente directa. No he probado esto y no tengo un compilador para probar con, pero el folowing debería funcionar:

#include <sstream> 

int main() 
{ 
    char[] data = "PLOP PLOP PLOP"; 
    int  size = 13; // PS I know this is not the same as strlen(data); 

    std::stringstream stream; 
    stream.rdbuf()->pubsetbuf(data, size); 

    // use stream as an istream; 
} 
Cuestiones relacionadas