2010-08-09 5 views
2

Ok, c'est plus un contrôle de cohérence que toute autre chose.Utilisation de noms de variables dynamiques uniques (valeurs non variables!)

Supposons que nous ayons une structure appelée lua_State, maintenant je dois créer une quantité incertaine de lua_State. Pour m'assurer que je n'utilise pas le même nom de variable deux fois, j'aurais besoin d'un moyen pour obtenir une variable unique chaque fois que je fais un nouvel état.

Cependant, il y a une seule façon (je pense?) Pour créer un nouvel état, et qui est la suivante:

lua_State *S = lewL_newstate(); 

Maintenant, je besoin d'un moyen de changer dynamiquement « S » à .. peu importe. Par exemple: Si j'avais 4 fichiers lua, et que je voulais charger chacun dans son propre lua_State, j'appellerais: lua_State * A = lewL_newstate(); pour le premier, lua_State * B = lewL_newstate(); pour la seconde, et ainsi de suite. Gardez à l'esprit le nombre de fichiers Lua varie donc la création d'un nombre fixe d'états ne sera probablement pas bien.

Comment ferais-je cela?

clarification:

.h

struct lua_State 

Cpp

createNewState(Lua_State* something){ 
lua_State* something = luaL_newstate(); 
} 

Je pensais à la création d'un

std::map<int, lua_State*> luaMap; 

mais j'aurais encore le problème de la réalité générateur g (faute de meilleurs mots) un nom de variable pour chaque int-index. Alors, ai-je bu trop de café et y at-il une solution évidente à ce que j'essaie de faire, ou devrais-je arrêter de coder jusqu'à ce que les coups de folie soient terminés?

Merci d'avance.

+3

Y at-il quelque chose de mal à utiliser un tableau/vecteur (pointeurs) à 's lua_state'? –

+3

* Pourquoi avez-vous besoin de noms de variables uniques? Est-ce qu'un vecteur n'est pas assez bon? – schot

+0

Le problème n'est pas de stocker les états, le problème est de composer des noms de variables d'état en fonction du nombre de fichiers lua à charger. donc 2 fichiers = comment puis-je obtenir 2 noms de variables uniques pour appeler ces nouveaux états? C'est un peu le point que je ne sais pas combien de noms de variables (états) j'ai besoin. Donc je ne peux pas les créer à l'avance. – Karrok

Répondre

3

Utilisez un std::vector pour stocker à la fois les états créés et générer des identifiants séquentiels (c'est-à-dire des indices de tableau). À moins que je ne manque quelque chose, vous compliquez énormément vos exigences.

std::vector<lua_State *> stateList; 

// create a new Lua state and return it's ID number 
int newLuaState() 
{ 
    stateList.push_back(luaL_newstate()); 
    return stateList.size() - 1; 
} 

// retrieve a Lua state by its ID number 
lua_State * getLuaState(int id) 
{ 
    assert(0 <= id && stateList.size() > id); 
    return stateList[id]; 
} 
2

Vous ne pouvez pas utiliser std::map<std::string, lua_State*> et utiliser le nom de script comme un index à l'état?

1

Pourquoi avez-vous besoin d'un nom de variable pour chaque index? Pourquoi n'est-il pas assez bon de se référer, par exemple, à luaMap[0] et luaMap[1]? Je ne pense pas qu'il y ait vraiment moyen de faire ce que vous voulez. Vous avez besoin d'une sorte de tableau dynamique, comme un fichier std :: vector.

0

GiNaC fait cela, mais le nom doit être explicitement donnée à une variable

Questions connexes