2015-04-20 16 views
8

ich OpenGL bin und ich brauche den Inhalt VertexShader.glsl in ein std gestellt werden :: stringNehmen Dateiinhalte und es in einen String in C++ setzen

ich an den entsprechenden Stellen Stackoverflow haben gesucht darüber, aber ich weiß nicht wirklich, wie Datentypen und Sachen zusammenpassen, damit es funktioniert.

Nehmen Sie zum Beispiel dieses von 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; 
} 

ich keine Ahnung, was nach

std :: string Inhalt

passiert haben Jedes Mal, wenn ich verwendet std :: string vorher war wie

std::string name = "2bdkid"; 

Antwort

9

Es ist constructor #6 here:

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

Welche tut:

Konstrukten die Zeichenfolge mit dem Inhalt des Bereichs [first, last).

istreambuf_iterator ist:

ein Single-Pass-Eingang Iterator, die aufeinanderfolgende Zeichen aus den std::basic_streambuf(ifs in diesem Beispiel) liest Gegenstand, für den es konstruiert wurde ... Die Standard-std::istreambuf_iterator konstruiert ist als End-of-Stream-Iterator bekannt. Wenn ein gültiges std::istreambuf_iterator das Ende des zugrunde liegenden Streams erreicht, wird es gleich dem End-of-Stream-Iterator.

content ist aus einem Paar Iterator konstruiert - die erste von denen unsere Single-Pass-Iterator in der Datei ist, und von denen die zweite ist die End-of-Stream-Iterator, der als ein Sentinel wirkt. Der Bereich [first, last), auf den sich der string-Konstruktor bezieht, ist in diesem Fall der vollständige Inhalt der Datei.

Verwandte Themen