所以我一直在努力解决演员阵容。在其他语言中,我见过类似的代码
Player player = (DifferentObject as Player)
尤其是在多人游戏方面。我的问题是,如何在 C++ 中复制这种代码?如果我使用
A* a = new B();
每当我想调用 B 函数时,我都需要转换 a 。
struct A
{
A() { }
virtual ~A() { }
void a_only_func() const
{
std::cout << "a only func." << std::endl;
}
virtual void a_virtual_func() const
{
std::cout << "a virtual func." << std::endl;
}
};
struct B : public A
{
B() { }
~B() { }
void b_only_func() const
{
std::cout << "Hello." << std::endl;
}
void a_virtual_func() const
{
std::cout << "derived." << std::endl;
}
};
int main()
{
A* a = new B()
((B*)a)->b_only_func(); /* identical - prints Hello.
(static_cast<B*>(a))->b_only_func(); * identical */
a->a_only_func(); // prints a only func.
a->a_virtual_func(); // prints derived.
((B*)a)->a_virtual_func(); // prints derived
delete a;
return 0;
}
如您所见,一切都按预期进行。但并非没有明确的演员表。我在这里错过了一些微妙的东西吗?
更新
以下似乎代表了我正在寻找的成语。
void do_stuff(Player* player)
{
DerivedPlayer localVar = dynamic_cast<DerivedPlayer*>(player);
}