改变班级的投入数量

时间:2017-09-07 11:59:50

标签: c++ class linked-list

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是一个有参数的类,现在我想传递一个列表,其中包含两个参数的类(比如总线)对象,并希望从文件中读取参数。如何更改添加功能,以便在汽车情况下需要一个输入,在总线情况下需要两个输入

P.S。链接是链表类。

基本上,我想创建一个函数,如果类是car(即模板T是car),则接受一个输入;如果类是bus,则需要两个输入。

2 个答案:

答案 0 :(得分:1)

提供重载:

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

答案 1 :(得分:0)

创建模板初始化函数

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