Parte 1 de 2
punteros se requiere a menudo para interconectar con bibliotecas de C cuando los datos necesita ser pasado a una API existente. Este mecanismo no se limita a los sistemas "heredados", los ejemplos modernos incluyen OpenGL, DirectX y Win32.
a continuación es un ejemplo de OpenGL: glVertexPointer (int, float, int, float *) toma un puntero flotante como primer argumento.
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);
en lugar de utilizar una matriz definida estáticamente que estaría bien para hacer lo siguiente:
Glfloat *vertex = new GlFloat[24];
...
glVertexPointer(3, GL_FLOAT, 0, vertices);
...
delete [] vertex.
o si desea utilizar std :: vector
std::vector<Glfloat> vertex;
vertex.resize(24);
...
glVertexPointer(3, GL_FLOAT, 0, &vertices[0]);
...
Parte 2 de 2
Los punteros a objetos y punteros a función son útiles para definir la función de miembro estático que necesita operar en una instancia específica de una clase. Este idioma aparece en los mecanismos de devolución de llamada.
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();
}
Si tiene control de callbackAPI se pueden lograr resultados similares con herencia y plantillas. Los ejemplos anteriores demuestran una forma de trabajar con un callbackAPI proporcionado por una tercera parte cuando se requiere para proporcionar un puntero a la función.
Mire este para ver por qué los punteros a veces se utilizan para los parámetros: http://stackoverflow.com/questions/2139224/2139254#2139254 – sbi