我的问题非常奇怪,因为我有一个解决方案,但在我看来,它非常差,我正在寻找一个更好的解决方案。这就是问题所在:
需要加载一个文件并具有创建一堆对象的特性。该对象将具有10-12个属性,并且将存在几种类型的对象,每个对象具有不同的特征。为了使它更有趣,有一种类型的对象实际上由两个独立的其他对象组成,但是出于这个问题的目的可以忽略它。该文件将存储一些对象以及基类的特征。例如,基类将包含" car"制造商,工厂制造的和可能使用的引擎,但每个对象将包含每个模型独有的其他数据;型号名称,轮胎或您能想到的任何东西。
目前我将汽车装入地图,来自文件:
std::map<std::string,std::string> loadCars(std::string filePath);
这样我就可以将这个地图传递给每个对象构造函数,并且它会查找它需要的密钥(例如,一个模型可能需要检查所使用的天窗类型,而另一个模型不需要。有一个天窗,所以可以忽略它)并初始化数据。它会将汽车模型名称加载到对象名称等中,如下所示:
Car ford = new Car(std :: map loadCars(cars.txt);
现在问题是从小到大:
1)如果加载了三个车型并且没有车顶天窗,地图中的天窗将在传递给构造函数时被单元化,我不知道这是否会导致错误,所以我需要一个函数用空值预先初始化地图,我认为这太糟糕了。
2)这是主要问题以及为什么这个解决方案不起作用: car文件中的一些值是数组。这意味着地图中的std :: string不会存储它们。现在我对我的解决方案看起来非常难看:
std::map<std::string, std::vector<std::string>> loadCars(std::string);
因此,我将此映射传递给构造函数,并且对于每个向量,它必须检查它是否具有多个值。例如,模型名称不会,因此将这一个值放入字符串中将被硬编码。或者,如果这种特定的汽车只有一种类型的轮胎,但通常它们有多种类型,那么它只会在一个元素的矢量中放入。
问题在于,在进行实际文件加载时,绝对必须将所有内容从简单字符串(如模型名称的字符串)转换为向量。这似乎是一个浪费和非常伪劣的代码。
有没有更好的方法呢?理想情况下,你有一个类似地图的容器,第二个值可以是矢量或字符串,但我不认为存在。