c++ - 无创多态性

标签 c++ polymorphism

一个简单的 C++ 问题:是否可以根据指针的运行时类型调用一个或另一个函数?

例如我有一个类 A,类 B 是 A 的子类。

我想写一个函数 f 这样

f(A* a)
{//do something
}
f(B* b)
{//do something else
}

//call f()
A* a = new A();
A* b = new B();
f(a);//do something
f(b);//do something, but I'd like it to "do something else"

额外的精度:A 和 B 是在我的代码中定义和实例化的,所以我不能在 A 和 B 上使用带有虚函数的常规多态...

我知道你可以使用一些 RTTI,但有没有更优雅的解决方案?

最佳答案

您可以使用 dynamic_cast 实现:

f(A* a)
{
B* b = dynamic_cast<B*>(a);
if (b == nullptr)
//do something
else
//do something else
}

关于c++ - 无创多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054920/

相关文章:

ruby-on-rails - 如何向 Feed 添加多态评论?

一个列表中的 C# 不同类对象

c++ - 虚拟构造函数

c++ - 为什么当我 "run"Xcode 产生一个更大的文件?

c++ - toString() : numbers in JSON

c++ - 尽管使用静态 unique_ptr 进行析构函数调用,但内存泄漏

java - 当实现类有自己的compareTo时,List<Interface>上的Collections.sort

c++ - Makefile,根据OS修改命令

c++ - 如何从 QStandardItem 继承?

java - 工厂类相对于其他多态性的好处