2011-12-21 3 views
1

je dois lier une méthode simple de modèle pour LUA, quelque chose commeméthodes de tolua et modèle

void addComponent<T>(IComponent*); 

J'utilise tolua pour faire les liaisons, mais il ne prend pas en charge les modèles de classe/méthode (tolua ++ soutient classe modèles mais pas ceux de la méthode :)). Est-il possible de lier cette méthode manuellement?

Merci d'avance.

+0

Pouvez-vous donner des exemples de la façon dont vous voulez utiliser cette méthode? – kikito

+0

Quelque chose comme ça de lua: 'go = GameObject: new(); animComponent = AnimComponent: new(); go: addComponent (animComponent); 'Désolé, J'ai essayé de formater le commentaire en utilisant le formatage de mini-Markdown mais je ne sais pas pourquoi il ne le fait pas. J'espère que c'est plus ou moins clair. – Notbad

+0

Pour le prochain, sachez que vous pouvez juste éditer votre question originale et ajouter n'importe quel code relatif demandé là;) – kikito

Répondre

3

Les modèles C++ n'existent pas réellement en dehors du compilateur. Les instanciations des modèles existent, mais les modèles eux-mêmes sont purement une construction à la compilation.

Il n'y a pas de fonction appelée void addComponent<T>(IComponent*); Il est une fonction appelée, void addComponent<int>(IComponent*) ou void addComponent<float>(IComponent*) ou pour un type particulier que vous voulez. Mais les modèles ne sont pas de vraies fonctions.

Vous pouvez lier un instanciation d'un modèle, qui est une fonction concrète. Cela fonctionne tout comme la liaison de n'importe quelle fonction libre dans toLua. Le nom d'une instanciation serait, addComponent<TypeName>TypeName est le nom du type concret avec lequel vous voulez l'instancier.

En d'autres termes, vous ne pouvez pas lier le concept addComponent qui est défini pour n'importe quel type. Vous pouvez lier tout réel addComponent qui est défini pour un type spécifique.

+0

Bon point. J'étais tellement concentré sur les fixations qui ont oublié un tel concept de base. D'autre part, comment luabind, etc ... détecte toutes les instanciations de méthodes de template pour une méthode template? Ne comprends pas. Je suppose qu'il le fait analyser les en-têtes mais pas sûr. – Notbad

+0

@Notbad: Luabind ne le permet pas non plus; vous devez utiliser des fonctions et des types concrets, pas de fonction. Luabind vous permet de lier un 'vecteur ' ou un 'vecteur ', mais pas un 'vecteur'. –

Questions connexes