Référence de fonction vers une fonction C
Bonjour,
Une référence de fonction dans mon code C++ réfère une fonction d'une bibliothèque écrite en C. Voici la déclaration du constructeur qui reçoit en paramètre la référence de fonction :
Code:
1 2 3 4 5
|
VertexBufferObject( int dataSize,
GLenum accessMode,
void (&glPointer)(GLint, GLenum, GLsizei, const GLvoid*),
GLint numCoord ); |
Lorsque j'instancie la classe VertexBufferObject comme ceci :
Code:
1 2 3
|
// Instanciation dans une liste d'initialisation
m_posVBO(m_POS_DATA_SIZE, GL_STREAM_DRAW, glVertexPointer, 2), |
J'obtiens à la compilation le type d'erreur suivant :
Code:
1 2
|
error: no matching function for call to ... |
Si je définis une fonction dans le fichier VertexBufferObject.cpp ayant strictement le même type de retour et les même paramètres comme ceci :
Code:
1 2
|
void func(GLint, GLenum, GLsizei, const GLvoid*) {} |
qui remplace glVertexPointer, alors la compilation n'échoue pas.
Une autre manière plus simple expliquant le problème. Ce code :
Code:
1 2 3 4
|
void (*f)(GLint, GLenum, GLsizei, const GLvoid*);
f = &glVertexPointer; |
donne l'erreur de compilation suivante :
Code:
1 2 3
|
error: invalid conversion from void (*)(GLint, GLenum, GLsizei, const GLvoid*)
to void (*)(GLint, GLenum, GLsizei, const GLvoid*) |
J'ai trouvé une solution qui est la suivante. J'ai crée des fonctions static inline dans ma classe VertexBufferObject qui enveloppe les fonctions glXXXXPointer que je souhaite employer. Y'a t'il une solution plus satisfaisante ?
Merci pour votre intêret à la question.