parte 1 di 2
puntatori sono spesso richiesto di interfacciarsi con librerie C quando i dati deve essere trasmesso in un'API esistente. Questo meccanismo non è limitato ai sistemi "legacy", gli esempi moderni includono OpenGL, DirectX e Win32.
sotto è un esempio OpenGL: glVertexPointer (int, float, int, float *) richiede un puntatore galleggiante come primo argomento.
GLfloat vertices[] = {...}; // 24 of vertex coords
...
// activate and specify pointer to vertex array
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vertices);
// draw a cube
glDrawArrays(GL_QUADS, 0, 24);
// deactivate vertex arrays after drawing
glDisableClientState(GL_VERTEX_ARRAY);
invece di utilizzare una matrice definita staticamente sarebbe ok per effettuare le seguenti operazioni:
Glfloat *vertex = new GlFloat[24];
...
glVertexPointer(3, GL_FLOAT, 0, vertices);
...
delete [] vertex.
o se si desidera utilizzare std :: vector
std::vector<Glfloat> vertex;
vertex.resize(24);
...
glVertexPointer(3, GL_FLOAT, 0, &vertices[0]);
...
Parte 2 di 2
I puntatori agli oggetti e ai puntatori di funzione sono utili per definire la funzione membro statico che deve operare su un'istanza specifica di una classe. Questo idioma appare nei meccanismi di callback.
class foo {
...
public:
static int s_callback0(void* obj){
return (foo*)(obj)->callback0();
}
int callback0(){
...
}
...
};
class callbackAPI {
public:
int setCallback(int(*fn)(void*),void* context){
m_fn(fn);
m_context(context);
}
void run(){
m_fn(m_context);
}
private:
int(*m_fn)(void*);
void *m_context;
};
main {
foo f;
callbackAPI cb;
cb.setCallback(foo::s_callback0,f);
cb.run();
}
Se si ha il controllo di callbackAPI risultati simili potrebbero essere ottenuti con l'ereditarietà e modelli. Gli esempi sopra illustrano un modo di lavorare con un callbackAPI fornito da una terza parte quando richiesto per fornire un puntatore a funzione.
Guardate questo per capire perché i puntatori sono a volte utilizzati per i parametri: http://stackoverflow.com/questions/2139224/2139254#2139254 – sbi