通过更改类别更改输入数量

changing number of inputs with changing class

本文关键字:输入      更新时间:2023-10-16
using namespace std;
template <typename T>
void add(linked<T> &list1,ifstream& myFile){
    string a;
    while(!myFile.eof()){ 
    myFile >> a;
    T car1;
    car1.setName(a);
    T& car2 = car1;
    list1.addtolist(car2);
    }
}
int main(){
    linked<car> list1;
    ifstream myFile;
    myFile.open("car.txt");
    add(list1,myFile);
    cout << (list1.getElem(1)).getName() << endl;
}

car是一个具有参数的类,现在我想通过一个具有两个参数的class(例如BUS)对象的列表,并希望从文件中读取参数。我如何更改添加函数,以便在汽车和两个输入的情况下需要一个输入

P.S。链接是链接列表类。

基本上,我想创建一个函数,如果类是汽车(即模板为car),则需要一个输入,如果类是巴士,则需要两个输入。

提供过载:

std::istream& operator >> (std::istream& is, Car& car)
{
    std::string s;
    is >> s;
    car.setName(s);
    return is;
}
std::istream& operator >> (std::istream& is, Bus& bus)
{
    std::string s;
    std::string s2;
    is >> s >> s2;
    bus.setName(s);
    bus.setProperty(s2);
    return is;
}

,然后

template <typename T>
void add(linked<T>& myList, std::istream& myStream){
    while (myStream) {
        T t;
        myStream >> t;
        myList.addtolist(t);
    }
}

创建模板初始化函数

template<typename T>
T CreateFromFileStream(ifstream& myFile);
template<>
car CreateFromFileStream(ifstream& myFile)
{
  std::string a;
  myFile >> a;
  car myCar;
  myCar.setName(a);
  return myCar;
}
template<>
bus CreateFromFileStream(ifstream& myFile)
{
  ...
}
template <typename T>
void add(linked<T> &list1,ifstream& myFile){
    while(!myFile.eof()){ 
      list1.addtolist(CreateFromFileStream<T>(myFile);
    }
}