Работа с несколькими потоками if как вектором потоков if - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь читать несколько файлов (3 в этом примере) построчно и использую вектор ifstream shared_ptrs для этого. Но я не знаю, как разыменовать этот указатель, чтобы использовать getline (), или в моем коде есть какая-то другая ошибка.

vector<shared_ptr<ifstream>> files;

for (char i = '1'; i < '4'; i++) {
        ifstream file(i + ".txt");
        files.emplace_back(make_shared<ifstream>(file));
    }

for (char i = '1'; i < '4'; i++) {
        shared_ptr<ifstream> f = files.at(i - '0' - 1); 
        string line;
        getline(??????, line); //What should I do here?

        // do stuff to line

    }

1 Ответ

1 голос
/ 07 ноября 2019

Разыменование shared_ptr очень похоже на разыменование необработанного указателя:

#include <vector>
#include <fstream>
#include <memory>

int main()
{
    std::vector<std::shared_ptr<std::ifstream>> files;

    for (char i = '1'; i < '4'; i++) {
            std::string file = std::string(1, i) + ".txt";
            files.emplace_back(std::make_shared<std::ifstream>(file));
        }

    for (char i = '1'; i < '4'; i++) {
        std::shared_ptr<std::ifstream> f = files.at(i - '0' - 1); 
        std::string line;
        getline(*f, line); //What should I do here? This.

        // do stuff to line

    }
}

Я исправил код так, чтобы он компилировался, но не рассмотрел проблемы стиля, поскольку они не имеют отношения к вопросу.

Примечание. Сообществу будет проще, если вы разместите полную минимальную программу, а не фрагмент кода.

...