Je travaille actuellement sur un "moteur" de jeu qui doit déplacer des valeurs entre un moteur 3D, un moteur physique et un langage de script. Comme j'ai besoin d'appliquer très souvent des vecteurs du moteur physique aux objets 3D et que je veux pouvoir contrôler à la fois la 3D et les objets physiques via le système de script, j'ai besoin d'un mécanisme pour convertir un vecteur d'un type (par exemple vector3d<float>
) à un vecteur de l'autre type (par exemple btVector3
). Malheureusement, je ne peux faire aucune hypothèse sur la façon dont les classes/structures sont disposées, donc un simple reinterpret_cast
ne fera probablement pas.Fonctions de conversion non-membres; Diffuser différents types, par ex. Vecteur DirectX au vecteur OpenGL
La question est: Y at-il une sorte de « statique »/procédé de coulée non-membres pour obtenir essentiellement ceci:
vector3d<float> operator vector3d<float>(btVector3 vector) {
// convert and return
}
btVector3 operator btVector3(vector3d<float> vector) {
// convert and return
}
En ce moment, ce ne sera pas la compilation car les opérateurs de casting doivent être des méthodes membres . (error C2801: 'operator foo' must be a non-static member
)
Merci Adam! C'est ce que je fais en ce moment. Je me demande s'il est possible de faire travailler le compilateur. Quelque chose comme "si vous voulez y aller, allez d'abord là-bas". – sunside
Je comprends. Bien que cette solution me semble la plus directe, j'ai ajouté une autre possibilité dans une autre réponse. –
Allez avec des fonctions gratuites. Les conversions implicites sont généralement une mauvaise façon de procéder, même lorsqu'elles sont possibles. – jalf