gpt4 book ai didi

c++ - 关于模板类的 C++ 动态转换

转载 作者:IT老高 更新时间:2023-10-28 22:26:22 29 4
gpt4 key购买 nike

我有基类A,类B继承自A,类C是模板类继承自A。类D继承自C。关系如下:

        A
/ \
B C (template class)
\
D

我可以使用 D 对象 D1 创建一个 A 对象 O1,然后我想将 O1 动态转换为 C 类型对象 C1。但我发现它失败了。我的问题是为什么这个过程会失败?

然后我使用 static_cast 从 D 对象 D1 创建 C 类型对象 C2,并检查 C2 是否具有来自 D2 的正确值。使用static_cast从D类型转换为C类型总是成功吗?

谢谢!!!

最佳答案

嗯,由于 C 是一个模板,它不是一个类型,不能用作转换的目标(既不是动态的也不是静态的),你不能从它派生。您需要实例化类模板。结果类可以在类型转换中使用。也就是说,以下将起作用:

struct A { };
template <typename T> struct C : A { };
struct D : C<int> { };

D d;
A& a = d;
C<int>& c = static_cast<C<int>&>(a); // or dynamic_cast, if `A` were polymorphic

关于c++ - 关于模板类的 C++ 动态转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12163244/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com