c++ - 循环向下转换的 C++ dynamic_cast 不能按预期工作
问题描述
我正在做一个程序来学习模板类和dynamic_cast
用途。它使用模板类 ( A
) 来制作B
类指针列表。在循环中,它检查每个指针是否指向一个C
对象,然后执行它的Print()
方法。
下面的代码应该输出"C CALL"
两次,但它只输出"Start!"
. 我错过了什么?
#include <vector>
template<typename widget_type>
class A
{
public:
std::vector<widget_type*> value;
virtual ~A() {}
void Add(void* val)
{
widget_type* target = (widget_type*)val;
value.push_back(target);
}
};
class B
{
public:
virtual ~B() {}
};
class C : B
{
public:
void Print()
{
std::cout << "C CALL\n";
}
};
class D : B
{
};
int main()
{
std::cout << "Start!\n";
A<B>* index = new A<B>;
C* c1 = new C;
D* d1 = new D;
C* c2 = new C;
index->Add(c1);
index->Add(d1);
index->Add(c2);
for (unsigned int i = 0; i < 3; i++)
{
B* val = index->value[i];
C* target = dynamic_cast<C*>(val);
if (target)
{
target->Print();
}
}
}
解决方案
推荐阅读
- ios - 系统警报“无邮件帐户”未显示 iOS 13 / 14
- javascript - 选项卡按钮内的关闭按钮
- javascript - D3 有向图编辑器 - v5 到 v6 迁移问题
- python - 散点图未在 streamlit 中发布
- javascript - 在函数中初始化类与在类中初始化
- java - 使用 @ColumnTransformer 仅更新聚合中的相关实体
- javascript - 代码的哪一点是画布创建的 p5?
- javascript - Uncaught ReferenceError: function is not defined : Can not call my function with onclick button [已解决]
- pytorch - 如何在训练 Huggingface Transformers (Pegasus) 模型的过程中防止 VRAM 不足?
- swift - Swift 子视图保存旧值(在其上堆叠新值)