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,则需要两个输入。
答案 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);
}
}