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

时间:2014-12-30 21:48:31

标签: c++ file oop deserialization

我有一个问题,我有一个不同城市和道路的文件,我做了一个名为Ville(法语城市)的课程和一个名为Route(法语之路)的课程,我需要把我所有的Ville放到一个矢量中我和我所有的路线都进入了路线的路径

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::string element;
  int statut = 0;
  while(fichier >> element)
  {
      if(element == "</ville>" || element == "</route>")
      {
          statut = 0;
          fichier >> element;
      }
      if(element == "<ville>" || statut == 1)
      {
          if(statut == 0)
          {
              fichier >> element;
          }
          cout << "Ville: " <<  element << endl;
          statut = 1;
      }
      if(element == "<route>" || statut == 2)
      {
          if(statut == 0)
          {
              fichier >> element;
          }
          cout << "Route: " <<  element;
          fichier >> element;
          cout << " Taille: " << element;
          statut = 1;
          fichier >> element;
          cout << " Speed: " << element;
          fichier >> element;
          cout << " Relie: " << element;
          fichier >> element;
          cout << " à " << element <<endl;
          statut = 2;
      }
  }
  }
  else
  {
       cout << "Error: Can't open the file" << endl;
  }

我正在寻找一种方法,可以让我做类似的事情:

Ville *element = new Ville (element);

或者我应该改变提取数据的方式以便轻松转换为对象?

2 个答案:

答案 0 :(得分:0)

您似乎需要std::map

std::map<string, Ville*> cities;
std::vector<Route> roads;

您检索城市数据的位置:

cities[element] = new Ville(element);

以及检索道路数据的位置

roads.push_back(Route(name, size, speed,
                      cities.at(cityName1),
                      cities.at(cityName2)));

答案 1 :(得分:0)

好的,所以你不能在C ++中直接做你想做的事情。虽然有一些解决方法:

您可以创建map<string, Ville*>,让我们称之为myCities:

然后,您可以通过阅读“&#39;元素”来使用此地图。从文件中,然后使用代码:

myCities[element] = new Ville(element);

从此时起,您可以myCities["whichever city you want"]访问您的商品。除此之外,我无法想到一个简单的方法,因为C ++不支持动态命名的变量。