C++ 从字符串创建对象(C+;+;)
我有一个问题,我得到了一个不同城市和道路的文件,我做了一个叫做Ville(法语中的城市)的类和一个叫做Route(法语中的道路)的类,我需要把我所有的Ville放进Ville的向量,把我所有的路线放进Route的向量 Ville构造函数的调用方式如下:C++ 从字符串创建对象(C+;+;),c++,file,oop,deserialization,C++,File,Oop,Deserialization,我有一个问题,我得到了一个不同城市和道路的文件,我做了一个叫做Ville(法语中的城市)的类和一个叫做Route(法语中的道路)的类,我需要把我所有的Ville放进Ville的向量,把我所有的路线放进Route的向量 Ville构造函数的调用方式如下: Ville *myCity = new Ville("myCity"); 以及道路建造商: Route *myRoad = new Road("myRoad",400, 130, myCity1, myCity2); 其中的论点是道路名称、大
Ville *myCity = new Ville("myCity");
以及道路建造商:
Route *myRoad = new Road("myRoad",400, 130, myCity1, myCity2);
其中的论点是道路名称、大小、最高速度以及道路连接的两个城市
该文件看起来像:
< ville>
Paris
Berlin
...
< /ville>
< route>
A0 400 130 Paris Berlin
...
</route>
或者我应该改变提取数据的方式以便轻松地转换为对象吗?似乎您需要一个
std::map
:
std::map<string, Ville*> cities;
std::vector<Route> roads;
以及检索道路数据的位置
roads.push_back(Route(name, size, speed,
cities.at(cityName1),
cities.at(cityName2)));
<>当然,所以你不能直接在C++中做你想做的事情。不过,有一点变通方法: 您可以创建一个
地图
,我们称之为myCities:
然后,您可以通过从文件中读取“元素”,然后使用以下代码来使用此映射:
myCities[element] = new Ville(element);
从现在起,您可以通过
myCities[“您想要的任何城市”]
访问您的项目。除此之外,我无法想出一个简单的方法来做这件事,因为C++不支持动态命名变量。如果您可以执行newville(“myCity”)
,并且element
是一个字符串,那么您是否只需要newville(element.c_str())
?是否正在寻找xml解析器?或者顺便说一句。更正你的最后一行-你使用元素来做两件不同的事情。我是故意这么做的,我希望这样做,因为变量城市将具有与城市本身相同的名称。为了澄清,你想创建动态命名的对象吗?i、 e.如果档案中的城市叫巴黎,你想要一个维尔*巴黎=新维尔(“巴黎”)?是的,绝对是,这正是我想要的
cities[element] = new Ville(element);
roads.push_back(Route(name, size, speed,
cities.at(cityName1),
cities.at(cityName2)));
myCities[element] = new Ville(element);