我有一些已有的班级,如 汽车, 火车, 车轮, 火车轮。 等。这些都是来自某个库--所以我不能修改这些。Car和Train不是来自于任何一个通用的基类,CarWheel和TrainWheel也是如此。CarWheel和TrainWheel也是如此。现在,我正试图编写模板函数f(),并面临着如何实现这个函数的挑战。Trait< T >::WheelType。 特质。任何指针都会有帮助。这是一个类型,而不是一个值,正在制造混乱。
class Car {
public:
// ....
int numWheels() const;
CarWheel& getWheel(int i) const;
void print() const;
// ...
};
class Train {
public:
// ...
int numWheels() const;
TrainWheel& getWheel(int i) const;
void print() const;
// ...
};
template <typename T >
void f(const T& obj)
{
for (int i = 0; i < obj.numWheels(); ++i) {
Trait<T>::WheelType w(obj.getWheel(i));
w.print();
}
}
int main()
{
Car c;
f(c);
Train t;
f(t);
return 0;
}