Вывод другого типа с использованием черты - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть несколько уже существующих классов, таких как Автомобиль, Поезд, 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;
}
...