【发布时间】:2019-11-07 13:20:19
【问题描述】:
我正在尝试逐行读取多个文件(本例中为 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
}
【问题讨论】:
-
如果
f是一个指向std::ifstream的普通指针,你会怎么做?你会以完全相同的方式来做,在这里。假设std::shared_ptr是一个指针。 -
顺便说一句,不需要经历
i - '0' - 1的所有舞蹈 - 只需使用for (auto i = 0; i < 3; ++i)或(更好)基于范围的for (auto f: files)。 -
如果您还在学习,添加一些明确的名称会很有帮助,例如
ifstream& ref = *f(为取消引用智能指针的结果定义名称/引用)。
标签: c++ vector shared-ptr fstream ifstream