在创建对象向量时,如何将参数传递给Default或Copy Constructor来初始化值?

时间:2014-03-25 00:53:53

标签: c++ c++11

对于我在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);      
}

我更喜欢创建一个对象向量并将参数传递给复制或默认构造函数,但我似乎无法找到实现此目的的方法。

有办法,还是我需要重新考虑我的方法?

谢谢!

1 个答案:

答案 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));