c++ - 创建对象 vector 时,如何将参数传递给 Default 或 Copy Constructor 以初始化值?

标签 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);      
}

我更喜欢创建一个对象 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/

相关文章:

c++ - 宏生成取决于预处理器条件

c++ - C/C++ 中 assert(false) 的更好替代方案

c++ - 在 C++ 中返回一个已知大小的数组?

c++ - 在mbed微 Controller (c++)上加密AES128-CBC并在nodejs中解密AES128-CBC

c++ - 用 C++11 编译比用 C++98 慢吗?

c++ - 可以通过模板间接访问基类中的私有(private)类型

c++ - 使用 initialization_list 导致歧义的函数重载

c++ - 非原始盒装类型的运算符

c++ - 使用可变参数模板展开序列范围

c++ - **直接**获取基于范围的循环中的元素类型,例如对于 "using"