PDA

Visualizza la versione completa : [c++]classe statica vs singleton


giuseppe500
15-08-2010, 18:10
Ciao.
Devo rendere comune a tutte le classi del mio progetto una classe.
E' una classe CSkeleton utilizzata per la skeleton animation , ha una collection di bones (ossa) con relative animazioni.
Vorrei condividerla senza doverla ricreare per tutti i modelli(skinned mesh) che la utilizzano dato che è la stessa, in modo che si possano creare tutti i modelli che si vogliono in modo semplice e risparmiando risorse.
Ho due(credo) possibilità:
1)classe statica
2)singleton
Shodan mi ha detto che il singleton è rognosetto in ambito multithreading , per adesso non mi importa , ma vorrei capire cosa è meglio.
invece la classe statica che problemi si va in contro?

Il mio problema è :
se una classe è statica tutte le variabili devono essere dichiarate statiche ?
Ad es devo poter inserire un CBone dall'interno di una classe non statica, nella collezione della classe CSkeleton deve essere statico anche quel bone?
insomma come "si mischiano" le variabili statiche con quelle non statiche?
per intenderci , come faccio a evitare quest'errore?
Error 2 error C2352: 'CSkeleton::GetBone' : illegal call of non-static member function c:\programmazione\old2\old\wild magic 4\geometrictools\wildmagic4\samplegraphics\materia ltextures\skeleton.cpp 47

grazie.

shodan
15-08-2010, 19:20
Che intendi con classe statica? :dottò:

giuseppe500
15-08-2010, 21:25
ciao shodan , mi sono sbagliato, intendevo una classe con metodi statici publici.
Ho visto che si possono usare anche i namespaces, tu cosa mi consigli?

shodan
16-08-2010, 00:33
Una funzione statica di una classe non ha il puntatore this come le funzioni membro, quindi dal punto di vista pratico è uguale a qualsiasi altra funzione.
Quello che cambia è che tale funzione statica può essere invocata solo se preceduta dal nome della classe, mentre una funzione contenuta in un namespace può essere invocata esplicitamente anteponendo il nome stesso del namespace, oppure senza se si usa using namespace ....
Quindi usare classi con solo metodi statici o delle funzioni in namespace è identico.

Così a naso, senza sapere come hai strutturato il programma, io andrei di singleton senza troppi problemi.

Loading