2010-06-19 23 views
1

J'essaie de trouver la meilleure façon d'enregistrer mon constructeur C++ Classes avec Lua (du point de vue de la conception de logiciels, pas une perspective de codage)Corriger l'approche logicielle pour faire des liaisons Lua à mes classes C++?

Comment dois-je faire?

Mes idées:

1) faire une sorte de fichier « liaisons initialisation Lua » qui lie chacun des constructeurs C++ de que je veux avoir disponible en Lua? (problème: ce fichier aurait tendance à devenir de plus en plus gros et plus difficiles à synchroniser/debug)

2) Chaque classe est responsable de l'enregistrer son propre constructeur avec ma classe « LuaManager » (problème: il être stupide pour lier le même constructeur pour Lua encore et encore pour la même classe de type A, donc idéalement, chaque type de classe scriptable devrait lier son constructeur avec Lua Une seule fois lors de l'utilisation de cette approche.)

Idées , ou les opinions sont les bienvenues.

Répondre

1

Je comprends ce que vous entendez en demandant

du point de vue de la conception de logiciels, pas une perspective de codage

mais je ne suis pas sûr qu'il ya distinction claire entre les deux. Ou, plus exactement, l'approche de codage que vous prenez déterminera vos options de conception. Par exemple, si vous utilisez SWIG, les options de votre question n'ont pas vraiment de sens, puisque vous écrivez un fichier "interface" séparé. Si vous utilisez luabind, les options ont du sens, mais je choisirais certainement 1) dans ce cas, car les en-têtes luabind ralentissent considérablement la compilation et j'aimerais les inclure dans le moins d'unités de compilation possible. Si votre approche de "codage" n'a pas cette lacune, puis 2) semble être la chose la plus sensée à faire.

0

Votre deuxième approche fonctionnera bien. Une façon d'éviter les enregistrements multiples consiste à utiliser une approche de liste d'initialisation statique. Chaque classe ajouterait une fonction d'inscription Lua à un pré-main statique std :: set. Ensuite, vous devez parcourir ce fichier std :: set lorsque votre application démarre et ajouter chaque constructeur de classe à votre moteur d'exécution Lua. Cela garantirait que vos liaisons de classe ne sont enregistrées qu'une seule fois.

+0

Cela semble assez intéressant, pourriez-vous me donner plus de détails? Merci. – Goles