Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmienna współdzielona dla wielu instancji klasy

Ostatnio zmodyfikowano 2017-02-09 19:33
Autor Wiadomość
Nazgul
Temat założony przez niniejszego użytkownika
Zmienna współdzielona dla wielu instancji klasy
» 2017-02-08 15:28:42
Dzień dobry,
Chciałbym zrobić program, grę.
Chcę, żeby tekstury ładowały i usuwały się z pamięci dynamicznie, żeby były załadowane tylko wtedy, gdy jakiś obiekt z nich korzysta.
taką klasę tekstur łatwo zaimplementować
C/C++
class texture
{
public:
    texture( unsigned int pos_in_file )
        : position_in_file( pos_in_file )
    { }
    ~texture() { unload(); }
    void addUser() {
        if( users <= 0 )
             load();
       
        users++;
    }
    void subUser() {
        users--;
        if( users <= 0 )
             unload();
       
    }
private:
    unsigned int users = 0;
    unsigned int texture_ID = 0;
    unsigned int position_in_file = 0;
    static std::string file_name;
   
    void load();
    void unload();
};
Problemem jest stworzenie takiej klasy, żeby można było te tekstury ładować z "paczek" tekstur.
w sensie że tekstury A, B i C są zapisane w pliku "tekstury1.texpack", a tekstury D, E i F są w pliku "tekstury2.texpack".
Można oczywiście zrobić, że każda tekstura z osobna pamięta nazwę swojego pliku, ale bez sensu zaśmiecać pamięć.
Czy jest sposób, żeby zrobić w pewien sposób zmienną współdzieloną dla kilku obiektów?

(Próbowałem już to zrobić za pomocą template, jednak to dopuszcza tylko stałe, a chciałbym tworzyć te paczki tekstur po uruchomieniu programu)
Z góry dziękuję za pomoc;)
P-157471
pekfos
» 2017-02-08 15:48:12
std::shared_ptr<>?
P-157474
Nazgul
Temat założony przez niniejszego użytkownika
» 2017-02-08 16:55:54
Nie do końca o to mi chodziło, bo to wciąż zapisanie wskaźnika do każdej instancji klasy;D
Ale zdałem sobie sprawę, że to co chciałbym osiągnąć jest zwyczajnie niemożliwe(zastanowiłem się jak komputer tam w swoich bebechach miałby to ogarnąć i że to nie jest ograniczenie C++ tylko samego komputera);D

albo każda teksturka będzie miała zapisany wskaźnik do stringa, albo...

C/C++
class texturepack
{
public:
    texturepack( std::string file_name_ )
        : file_name( file_name_ )
    { }
    ~texturepack() { }
    void addUser( unsigned int index ) {
        if( users[ index ] <= 0 )
             load( index );
       
        users++;
    }
    void subUser( unsigned int index ) {
        users--;
        if( users[ index ] <= 0 )
             unload( index );
       
    }
private:
    std::vector < unsigned int > users;
    std::vector < unsigned int > texture_ID;
    std::vector < unsigned int > position_in_file;
    std::string file_name;
   
    void load( unsigned int index );
    void unload( unsigned int index );
};
Ehh.. i po co ta obiektowość, skoro i tak wszystko trzeba zbierać w całość...; D
P-157481
1aam2am1
» 2017-02-08 17:32:37
static by wystarczył lub stworzyć plik cpp i tam dać zmienną globalną którą widziała by tylko twoja klasa
P-157482
Nazgul
Temat założony przez niniejszego użytkownika
» 2017-02-08 19:57:48
Emm czasem mam wątpliwości co do tego, czy ktoś przeczytał treść pytania..
Rozwiązanie podobne do twojego, napisałem w pierwszym poście:P

"(Próbowałem już to zrobić za pomocą template, jednak to dopuszcza tylko stałe, a chciałbym tworzyć te paczki tekstur po uruchomieniu programu)"

Czyli że za pomocą template mógłbym stworzyć całe multum klas zawierających inne statyczne stringi(z nazwą pliku), jednak to rozwiązanie blokuje tworzenie tych klas w już skompilowanym programie, twoja propozycja również to blokuje;D
Ale bardzo dziękuję za dobre chęci;)
P-157497
1aam2am1
» 2017-02-08 20:09:54
Czyli chciałbyś aby klasa dzieliła zmienną (nazwę pliku) jako pamięć. Ale jednocześnie chcesz aby można było wpisać inną nazwę pliku dla innych obiektów tej samej klasy. Tak jak pekfos mówił wskaźnik. Bo innej mozliwosci niema. Jak chcesz aby klasa wiedziała do czego ma się odwołać gdy niema nigdzie tej informacji zapisanej. Wskaźnik jest taka możliwością.
P-157499
Nazgul
Temat założony przez niniejszego użytkownika
» 2017-02-09 19:33:57
Tak tak, masz całkowitą rację:D
Już napisałem, że zdałem sobie z tego sprawę, jak się zastanowiłem jak komputer w swoich bebechach miałby to rozkminić i że się nie da;D

Już zamykam temat, po prostu wcześniej zapomniałem

Dziękuję bardzo za pomoc
P-157556
« 1 »
  Strona 1 z 1