(主要来自accessing variable from another class template粘贴到分离两个问题)访问实例变量从另一模板类
我试图使可与数据加载类用于加载从文本数据容器类的系统文件
这里有两类数据:
class Customer
{
//...
};
class Tour
{
std::vector<Customer*> custPtrs;
//...
};
这些都是我的两个容器类:
template <class T>
class P_VContainer
{
boost::ptr_vector<T> data;
//...
};
template <class T>
class ListContainer
{
std::list<T> data;
//...
};
,最后我的数据装载模板:
template<template<class> class T>
class DataLoader
{
T<Customer> custList;
T<Tour> tourList;
//...
};
我已经超载>>在客户和旅游经营者,这样的ifstream的可以传递给他们,一条线是从物流中取出,标记化和把它放到对象实例变量中。
容器类按顺序处理插入操作,数据加载器管理列表并创建ifstream,以便将其传递给对象。
这是我的问题:
我加载我的客户在第一个文件,并填充该列表。
之后,我不得不加载旅游,其中有顾客的客户ID预订他们,我想存储这些客户在每个旅游对象的指针向量,以便客户信息很容易访问。
在此刻我存储customerIDs作为一个字符串列表,那么当旅行团都装,传递CUSTLIST成通过CUSTLIST搜索功能,用字符串列表匹配它
这意味着我我不得不维护两个列表,一个字符串和其他指针,基本上双处理所有的数据..考虑到数据集是相当大的,这意味着更长的加载时间..
所以我想知道如果有一种方法可以从Tour的overloaded >>运算符中访问custList实例变量,并在创建Tour对象时生成指针列表?
从技术上讲,所有事情都发生在DataLoader类的范围内,所以我认为它应该是可能的,但我只是不太确定如何去做..也许使它成为一个朋友类?我曾尝试这样做,但还没有过迄今为止任何运气..
任何帮助,将不胜感激,并遗憾的长篇大论的解释,希望这是有道理的..
顾客如何与旅游相关?了解这两种数据类型之间的关系很重要。从逻辑上讲,我假设客户类型拥有旅游列表。 –
既没有从彼此继承,反而是另一种方式,Tour拥有一个客户列表,这就是为什么我需要在创建Tour对象时访问已经加载的客户列表。我将更新代码以反映关系。 – guskenny83
“此刻我将customerIDs存储为一个字符串列表,然后当浏览器全部加载时,将custList传递到一个通过custList进行搜索的函数,并将其与字符串列表进行匹配”我认为'boost :: serialize '可以在内部处理这种情况。无论如何,当客户ID列表也应该工作时,为什么还需要'Tour'中的指针列表?如果你真的需要指针,你可以通过'>>'的左侧提供客户列表,即'mysource >> someTour',并使用'mysource'的自定义类型。 – dyp