だから私はキャストに頭を包み込もうとしてきました。他の言語では、次のようなコードを見てきました
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);
}