Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从字符串创建对象(C+;+;)_C++_File_Oop_Deserialization - Fatal编程技术网

C++ 从字符串创建对象(C+;+;)

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(法语中的城市)的类和一个叫做Route(法语中的道路)的类,我需要把我所有的Ville放进Ville的向量,把我所有的路线放进Route的向量

Ville构造函数的调用方式如下:

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);