取り組んでいる問題があります。このパターンで互いに継承する数値クラスがあります。
#include <stdio.h>
#include <stdlib.h>
#include <list>
class TimeObject
{
public:
virtual void Tick()=0;
std::list<TimeObject*> ticks;
};
class MapObject : public TimeObject
{
public:
MapObject()
{
ticks.push_front(this);
printf("Create MapObject %p\n", this);
}
void Tick() { printf("mapobject tick\n"); }
};
class ControlObject : public MapObject
{
public:
ControlObject()
{
ticks.push_front(this);
printf("Create ControlObject %p\n", this);
}
void Tick() { printf("controlobject tick\n"); }
};
int main()
{
ControlObject test;
std::list<TimeObject*>::iterator it = test.ticks.begin();
for(; it != test.ticks.end(); it++)
{
TimeObject *trigger = *it;
trigger->Tick();
}
return 0;
}
この例のリストには、TimeObject
派生クラスが格納されています。私の問題は、ディスパッチMapObject
でもあるリストにポインターを格納すると、ControlObjects
常にControlObject
関数が選択されることです。
ポリモーフィズムを使用してポインターでMapObject
関数をトリガーすることは可能ですか? ControlObject
それが不可能/実用的でない場合、良い代替手段は何ですか?