对于我在C ++类中为项目编写的程序,其中一个要求是使用构造函数初始化对象中的数据成员。
我们还必须阅读二进制文件。
我选择实现这个目标的方法是:
// Loads invmast.dat or creates one if none exists
fstream invFile;
invFile.open("invmast.dat", std::fstream::in);
if (!invFile)
{
cout << "File invmast.dat not found, creating a new one." << endl;
invFile.open("invmast.dat", std::fstream::out | std::fstream::app | std::fstream::binary);
if (!invFile)
{
cerr << "Unable to create or open file invmast.dat; exiting." << endl;
exit (EXIT_FAILURE);
}
}
cout << "File invmast.dat opened successfully." << endl;
vector <InventoryItem> invMast;
//vector <InventoryItem>::iterator invMastIterator;
InventoryItem invLoader;
while ( invFile && !invFile.eof())
{
invFile.read(reinterpret_cast<char *>(&invLoader), sizeof(invLoader));
invMast.insert(invMast.begin(), invLoader);
}
我更喜欢创建一个对象向量并将参数传递给复制或默认构造函数,但我似乎无法找到实现此目的的方法。
有办法,还是我需要重新考虑我的方法?
谢谢!
答案 0 :(得分:1)
如果您只是构建一个元素,可以使用emplace_back
直接在vector
中构建它:
invMast.emplace_back(some, constructor, parameters);
但是在这里,因为你从原始字节初始化InventoryItem
,你可能只想构造一个对象并将其移动到向量中:
invFile.read(reinterpret_cast<char *>(&invMast.back()), sizeof(invLoader));
invMast.push_back(std::move(invLoader));
或默认构造一个元素,然后填充它:
invMast.emplace_back();
invFile.read(reinterpret_cast<char *>(&invMast.back()), sizeof(InventoryItem));