pole w klasie jako wskaźnik do obojętnie jakiej klasy

0

Tworzę sobie frameworka do gier 2d i natknąłem się na pewien problem. Chce podmieniać dynamicznie wskaźnik do aktualnie wyświetlanej sceny w klasie core. Problem polega na tym, że jedna scena = jedna klasa

prototyp klasy core:

class core
{
    public:

        static /* TYP* */ pScene;

        core();
        ~core();
        static void changeScene(/* TYP* */);
};

I właśnie nie wiem jak zrobić ten typ, próbowałem już z szablonami klasy, z typem void*, ale nie wiem jak przerzutować void* na wskaźnik typu klasy sceny żeby był do użytku, bo nie wiem na jaką klasę sceny będzie wskazywać przekazany do changeScene wskaźnik, próbowałem też zrobić tak, żeby klasy sceny dziedziczyły po klasie abstrakcyjnej scene, ale podobny problem jak przy void*, nie wiem jak przerzutować to na typ klasy zdatny do użytku.

0

typ scene = reinterpret_cast<typ>(pScene)

0

^ ta ale powiedz mi skąd mam typ wziąć :P

0

wydaje mi się, że to co chcesz zrobić da się zrealizować przy użyciu polimorfizmu

0

Dzięki, przejrzałem co to był ten polimorfizm i to powinno działać, jutro sprawdze i dam znać jak coś będzie nie tak, dzisiaj już nie mam jak. Jak się czyta tylko teorie to wszystko z głowy ucieka :) a praktyki w c++ mam 2 dni, ale praktyka czyni mistrza, za miesiąc już będzie lepiej :D

0

No i nie działa :P

undefined reference to `core::pScene'


class IScene
{
    public:

        virtual void render() = 0;
        virtual void update(float) = 0;
};

class core
{
    public:

        static IScene* pScene;

        core();
};

class menu : public IScene
{
    public:

        void update(float);
        void render();
};

void menu::update(float delta)
{

}

void menu::render()
{
    
}

core::core()
{
    pScene = new menu();
};

int main()
{
    core* pCore = new core();
    delete pCore;
    return 0;
}

0

Działa, działa. Tylko źle używasz static. Skoro używasz statycznego pola klasy to musisz go zainicjalizować.

IScene* core::pScene = nullptr;

1 użytkowników online, w tym zalogowanych: 0, gości: 1