0

我正在尝试制作一个容器类系统,该系统可以与数据加载器类一起使用以从文本文件中加载数据

以下是两类数据:

class Customer
{
    //...
};

class Tour
{
    //...
};

这些是我的两个容器类:

<template T>
class P_VContainer
{
    boost::ptr_vector<T> data;
    //...
};

<template T>
class ListContainer
{
    std::list<T> data;
    //...
};

最后是我的数据加载器模板:

<template T>
class DataLoader
{
    T<Customer> custList;
    T<Tour> tourList;

    //...
};

我在 Customer 和 Tour 中重载了 >> 运算符,以便可以将 ifstream 传递给它们,从流中取出一行,标记化并将其放入对象实例变量中。

容器类按顺序处理插入,数据加载器管理列表并创建 ifstream 以便可以将其传递给对象。

所以我的第一个问题——已解决——是如何让我的 DataLoader 类工作,以便我可以通过以下方式在 main 中初始化它:

DataLoader<P_VContainer> loader;

然后它会自动实例化以下实例变量:

P_VContainer<Customer> custList;
P_VContainer<Tour> tourList;

或者这甚至可能吗?

我的第二个问题——未解决——是这样的:

我首先加载我的客户文件,然后填充该列表。

之后,我必须加载旅行,其中包含预订客户的 customerID,并且我想将这些客户存储在每个旅行对象中的指针向量中,以便轻松访问客户信息。

目前我将 customerIDs 存储为字符串列表,然后当所有旅行都加载后,将 custList 传递给通过 custList 搜索的函数,将其与字符串列表匹配

这意味着我必须维护两个列表,一个是字符串,另一个是指针,并且基本上是双重处理所有数据..考虑到数据集非常大,这意味着加载时间要长得多..

所以我想知道是否有一种方法可以从 Tour 的重载 >> 运算符内部访问 custList 实例变量,并在创建 Tour 对象时生成指针列表?

从技术上讲,一切都发生在 DataLoader 类的范围内,所以我认为这应该是可能的,但我只是不太确定如何去做.. 也许让它成为一个朋友类?我试过这样做,但到目前为止还没有运气..

任何帮助将不胜感激,并对冗长的解释感到抱歉,希望它有意义..

4

0 回答 0