私は2つのクラスを持っています。スーパークラスは「Component」クラスで、サブクラスは「Transform」クラスです。
私が使用しているフレームワークには、特定のタイプのコンポーネントのリストを返す関数があります。ただし、タイプは特定のサブクラスに制限されていないため、リストはコンポーネントとしてそれらを返します(ただし、それは私が使用している方法です)。
したがって、次のシナリオでは、返されるすべてのコンポーネントが Transform サブクラスになることがわかっています。私がやっていることは、リストを反復処理してから、各コンポーネントを Transform にキャストすることです。これが私のコードです:
std::list<Cistron::Component*,std::allocator<Cistron::Component*>> playerTransforms = objectManager->getComponents(player,"Transform");
std::list<Cistron::Component*>::iterator playerComponentIterator = playerTransforms.begin();
for (playerComponentIterator; playerComponentIterator != playerTransforms.end(); playerComponentIterator++)
{
Transform *tmpTransform = static_cast<Transform*> (*playerComponentIterator);
std::cout << tmpTransform->x ;
std::cout << tmpTransform->y ;
}
これはどのくらい効率的ですか?私はC++を初めて使用するので、これを行うためのより良い方法があるかどうかわかりません。