用性状推导出另一种类型

问题描述 投票:0回答:1

我有一些已有的班级,如 汽车, 火车, 车轮, 火车轮。 等。这些都是来自某个库--所以我不能修改这些。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;
}
c++ templates traits
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.