LINUX.ORG.RU

C++ чтение из файла


0

0

есть файл
блок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);

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

in_dance
()
Ответ на: комментарий от in_dance

>Если я правильно понял, то фишка тут в том, что объект необходимо создавать полиморфно.... Считываешь этот идентификатор и передаёшь в фабрику объектов

"где create_block уже будет смотреть что за блок и создавать его"

ИМХО функцию фабрики объектов исполняет create_block? ИМХО такой подход тоже имеет право на жизнь, в зависимости от задачи коненчо.

KIV
()
Ответ на: комментарий от in_dance

Спасибо большое!!! именно это и нужно было .. щас буду разбираться как че делается :)

fura13 ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.