对于我正在为我的 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);
}
我更喜欢创建一个对象 vector 并将参数传递给拷贝或默认构造函数,但我似乎找不到执行此操作的方法。
有没有办法,或者我需要重新考虑我的方法?
谢谢!
最佳答案
如果您只是简单地构建一个元素,您可以使用 emplace_back
直接在 vector
中构造它:
invMast.emplace_back(some, constructor, parameters);
但在这里,由于您是从原始字节初始化 InventoryItem
,您可能只想构造一个对象并将其移动到 vector 中:
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));
关于c++ - 创建对象 vector 时,如何将参数传递给 Default 或 Copy Constructor 以初始化值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22623497/