Spero di non aver contravvenuto alla regola "non riesumare thread datati", ho pensato che questo era sia un thread didattico che non troppo vecchio (3 mesi), mi scuso se dovessi aver sbagliato.
Ho letto e capito tutti gli esempi che son stati fatti finora. Quello che non mi è chiaro è come "spingersi oltre": gli esempi fatti finora hanno un puntatore dichiarato nel main, e la classe a cui puntare viene assegnata nel main. Come si fa nel caso l'assegnazione debba venire fatta dalle classi?
Posto un esempio.
.H:
class graphic
{
public:
graphic();
~graphic();
static void reshape (int width, int height);
static void display (void);
protected:
virtual void m_renderPrimitive(void)=0;
};
class opening: public graphic
{
public:
opening();
~opening();
private:
void m_renderPrimitive (void);
};
.CPP:
graphic::graphic(){}
graphic::~graphic(){}
void graphic::display (void) //METHOD: DISPLAY
{
//Righe di codice che non servono qua
graph->m_renderPrimitive(); // Render the primitive
}
MAIN:
int main (int argc, char **argv)
{
graphic *graph = new opening();
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE);
glutInitWindowSize (700, 400);
glutInitWindowPosition (100, 100);
window=glutCreateWindow ("Intro");
glutDisplayFunc(graph->display);
glutReshapeFunc(graph->reshape);
glutMainLoop();
return 0;
}
Se dichiaro
graphic *graph
nel main, mi dà errore perchè dice 'graph was not declared in this scope'. Penso allora sia da dichiarare static all'interno della classe graph, ma mi dà errore probabilmente perchè non lo faccio nel modo giusto. Qualcuno avrebbe il buon cuore di spiegarmelo?
Praticamente la funzione a cui punta, la m_renderPrimitive(), è una funzione di 3-4 classi derivate. A seconda di ciò che faccio, ognuna di queste classi deve poter cambiare il puntatore. Avevo pensato di dichiararlo come puntatore statico di graphic in modo che esista indipendentemente dall'oggetto, e accessibile così da tutte le classi derivate, ma non so come farlo... (lo so fare ma con i metodi) Grazie ancora!