Umieszczanie metod w tablicy

0

Witam, piszę sobie prostą gre w c++ w konsoli. Stworzylem sobie cos podobnego do kontenera:

class Kontener
{
private:
	Skills* tab_skills;
	unsigned const int rozmiar = 6;
public:
	Kontener();
	~Kontener();
	bool Ustaw(unsigned int indeks, Skills obiekt);
	Skills Pobierz(unsigned int indeks);

};


Kontener::Kontener() { tab_skills = new Skills[rozmiar]; }
Kontener::~Kontener() { delete[] tab_skills; }

bool Kontener::Ustaw(unsigned int indeks, Skills obiekt)
{
	if (indeks >= rozmiar) return false;
	tab_skills[indeks] = obiekt;
	return true;
}

Skills Kontener::Pobierz(unsigned int indeks)
{
	if (indeks < rozmiar) return tab_skills[indeks];
}

Stworzylem tez klase Skills, której metodami są poszczególe umiejętności. Moje pytanie brzmi czy da sie zrobić tak aby ten mój kontener przechowywał te skille, które de facto są metodami klasy Skills ?

0

Czy na pewno ta klasa jest potrzebna? Jesteś pewien, że istniejące kontenery np. std::vector nie nadają się?

W ogólności da się przechowywać wskaźniki do metod:

#include <iostream>
#include <vector>
using namespace std;

struct X
{
    int id;
    X(int id) : id(id) {}
    void foo() { cout << "foo " << id << endl; }
    void bar() { cout << "bar " << id << endl; }
};
 
int main()
{
    using MemberPointer = void (X::*)();
    vector<MemberPointer> methods = { &X::foo, &X::bar };
    
    X one(1);
    (one.*methods[0])();
    (one.*methods[1])();
    
    X two(3);
    (two.*methods[1])();
    (two.*methods[0])();
    
    return 0;
} 
0

Chętnie spróbował bym skorzytać z std::vector lecz można powiedzieć, że mam narzucone napisanie "własnego kontenera" i z tąd ta klasa

3

W takim razie poczytaj o rule of three/five, bo na razie skopiowanie kontenera spowoduje UB.

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