未知的动态铸造

Dynamic Casting With Unknowns

本文关键字:动态 未知      更新时间:2023-10-16

c++新手,但仍在掌握它。使用模板,我有这样的:

template<typename TransportType>
Automobile<TransportType>::Automobile(std::string make)
    : Transport(make)

所以我有一些这些都继承自"transport"。例如:

template<typename TransportType>
Aircraft<TransportType>::Aircraft(std::string make)
    : Transport(make)
Automobile<Coach> * coach = new Automobile<Coach>("Volvo");
Aircraft<JumboJet> * jumbojet = new Aircraft<Jumbojet>("Boeing");`

我的问题是,如果我有一个传输类型,我怎么能"转换"到另一个没有把传输类型,直到运行时。如:

*coach = dynamic_cast<*jumbojet typeid<transporttype>>(jumbojet);`

(我不确定是*jumbojet类型id)

我看了看memcpy,但似乎不能使它工作。(我知道如果实际的对象内部有指针,可能会出现问题,而它们没有。)

memcpy(*jumbojet, *coach, sizeof(coach))

别再这么做了。您不需要在运行时强制转换。相反,可以考虑使用虚函数(即运行时多态性)来消除在运行时将基类强制转换为任意派生类的需要。