У меня есть несколько уже существующих классов, таких как Автомобиль, Поезд, CarWheel, TrainWheel et c. Они приходят из какой-то библиотеки - поэтому я не могу их изменить. Автомобиль и поезд не из какого-либо общего базового класса. Также как CarWheel и TrainWheel. Теперь я пытаюсь написать шаблонную функцию f () и сталкиваюсь с проблемой, как реализовать эту черту Trait :: 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;
}