2015-04-20 3 views
8

Я использую OpenGL, и мне нужно содержимое VertexShader.glsl быть помещены в станд :: струннойсодержание Возьмите файл и поместить его в строку в C++

Я смотрел на соответствующих должностях StackOverflow об этом, но я действительно не знаю, как сопоставлять типы данных и прочее, чтобы заставить его работать.

Возьмем для примера из 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; 
} 

Я понятия не имею, что происходит после того, как

содержание станд :: строка

Каждый раз, когда я использовал станд :: строка раньше было

std::string name = "2bdkid"; 

ответ

9

Это constructor #6 here:

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

Что делает:

Формирует строку с содержимым диапазона [first, last).

istreambuf_iterator является:

один проход входного итератора, который считывает последовательные символы из std::basic_streambuf(ifs в данном примере) объект, для которого он был построен ... По умолчанию построенный std::istreambuf_iterator известен как итератор конца потока. Когда действительный std::istreambuf_iterator достигает конца базового потока, он становится равным итератору конца потока.

content построен из пары итератора - первые один из которых является нашим однопроходным итератором в файл, а второй из которых является итератором истекшим потока, который выступает в качестве дозорных. Диапазон [first, last), который ссылается на конструктор string, является в этом случае полным содержимым файла.

Смежные вопросы