2015-04-20 13 views
8

sto usando OpenGL e ho bisogno il contenuto di VertexShader.glsl per essere messo in uno std :: stringcontenuto dei file Prendere e metterlo in una stringa in C++

Ho guardato i relativi messaggi StackOverflow su questo, ma non so davvero come combinare insieme tipi di dati e cose per farlo funzionare.

Prendiamo ad esempio questo da Read file-contents into a string in C++

#include <fstream> 
#include <string> 

int main(int argc, char** argv) 
{ 

    std::ifstream ifs("myfile.txt"); 
    std::string content((std::istreambuf_iterator<char>(ifs)), 
         (std::istreambuf_iterator<char>() )); 

    return 0; 
} 

Non ho idea di quello che sta accadendo dopo

contenuti std :: string

Ogni volta che ho usato std :: string prima è stato come

std::string name = "2bdkid"; 

risposta

9

E 'constructor #6 here:

template< class InputIt > 
basic_string(InputIt first, InputIt last, 
       const Allocator& alloc = Allocator()); 

che fa:

costruisce la stringa con i contenuti della gamma [first, last).

istreambuf_iterator è:

un iteratore ingresso single-pass che legge i caratteri consecutivi a std::basic_streambuf(ifs in questo esempio) oggetto per il quale è stato costruito ... Il default-costruito std::istreambuf_iterator è noto come iteratore di fine flusso. Quando un valore valido di std::istreambuf_iterator raggiunge la fine del flusso sottostante, diventa uguale all'iter iter di fine flusso.

content è costruito da una coppia iteratore - il primo dei quali è la nostra iteratore a singolo passaggio nel file, ed il secondo dei quali è l'iteratore fine flusso che funge da sentinella. L'intervallo [first, last) cui si riferisce il costruttore string è, in questo caso, l'intero contenuto del file.