Добавление объекта fstream в вектор - PullRequest
0 голосов
/ 26 октября 2019

У меня похожая проблема: Проблемы с использованием fstream в классе

Я четко понимаю, что не могу скопировать объект fstream.

Теперь .. я хочу иметь вектор структур, который включает fstream. поэтому я создал эти typedefs:

typedef struct
{
    uint16_t output;
    std::string outputStr;
    std::fstream fileStream{};
} LogOutput;

typedef std::vector <LogOutput> vecLogOutput;

Проблемы возникают, когда я пытаюсь добавить что-то к этому вектору:

vecLogOutput vLO;
LogOutput lo;

// CREATE 3 LogOutputs, and add them, to vector
for (int i = 0; i < 3; i++)
{
    lo.output = i;
    lo.outputStr = "fileout" + std::to_string(i) + ".txt";
    lo.fileStream.open(lo.outputStr, std::fstream::out | std::fstream::trunc);
    vLO.emplace_back(lo);
}

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

1 Ответ

0 голосов
/ 26 октября 2019

std :: move - это то, что вы ищете:

vLO.emplace_back(std::move(lo));

...