есть файл
блок1
блок1
блок2
блок1
блок2 и т.д.
блок это список строк вида name=val
как сделать используя STL красивое чтение из файла блоками
блоки оборачивают соответствующие классы то есть class block1 и block2
в больную голову приходит только
while (!file.eof())
{
if (конец блока) // такой признак един для всех блоков
create_block (vector_str)
else
{
string buf_str;
file >> buf_str;
vector_str.push_back ( buf_str );
}
}
где create_block уже будет смотреть что за блок и создавать его
мне кажется что этот код какойто косячный, подскажите
что можно поправить, или может что почитать?
не пинайте сильно тока начинаю нормально изучать STL :)
спасибо!
На сколько я понимаю block1, block2 - это объекты классов block1 и block2 соответственно.
Если я правильно понял, то фишка тут в том, что объект необходимо создавать полиморфно. На эту тему уже столько всего понаписано, что повторять, в принципе, смысла нет (к примеру 8 глава у Александреску).
Но всё же. У тебя есть абстрактный класс AbstractBlock, от него производные Block1, Block2.
У AbstractBlock есть виртуальный метод Load().
В файле, в начале каждого блока ставишь идентификатор блока. Считываешь этот идентификатор и передаёшь в фабрику объектов.
AbstractBlock *b;
b = BloackFactorySingleton.Instance()->CreateObject(id);
Если тебя интересует именно способ считывания данных из файла, то на это можно создать отдельную стратегию и в случае чего реализовать её так, как надо.
>Если я правильно понял, то фишка тут в том, что объект необходимо создавать полиморфно.... Считываешь этот идентификатор и передаёшь в фабрику объектов
"где create_block уже будет смотреть что за блок и создавать его"
ИМХО функцию фабрики объектов исполняет create_block? ИМХО такой подход тоже имеет право на жизнь, в зависимости от задачи коненчо.