Использование уникальных имен динамических переменных (не значений переменных!) - PullRequest
2 голосов
/ 09 августа 2010

Итак, это больше проверка работоспособности, чем что-либо еще.

Предположим, у нас есть структура с именем lua_State, теперь мне нужно создать неопределенное количество уникальных lua_State.Чтобы убедиться, что я не использую одно и то же имя переменной дважды, мне понадобится какой-то способ получения уникальной переменной каждый раз, когда я создаю новое состояние.

Однако есть только один способ (я думаю,?) для создания нового состояния, и это выглядит следующим образом:

lua_State *S = lewL_newstate();

Теперь мне нужен какой-то способ динамически изменить это "S" на ... что угодно.

Например:Если бы у меня было 4 файла lua, и я хотел бы загрузить каждый в их собственный lua_State, я бы вызвал: lua_State * A = lewL_newstate ();во-первых, lua_State * B = lewL_newstate ();для второго и тд.Имейте в виду, что количество файлов lua варьируется, поэтому создание фиксированного количества состояний, вероятно, не будет успешным.

Как бы я поступил так?

уточнение:

.h

struct lua_State

.cpp

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

Я думал о создании

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

, но тогда у меня все еще была бы проблема с генерацией (из-за отсутствия лучших слов) имя переменной для каждого целого индекса.

Итак, выпил ли я слишком много кофе, и есть ли на первый взгляд очевидное простое решение того, что я пытаюсь сделать, или я должен простопрекратить кодирование до тех пор, пока сумасшедшие удары не пройдут?

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 10 августа 2010

Используйте std::vector для хранения созданных состояний и генерации последовательных идентификаторов (то есть индексов массива). Если я что-то упустил, то вы чрезмерно усложняете свои требования.

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 голосов
/ 09 августа 2010

Разве вы не можете использовать std::map<std::string, lua_State*> и использовать имя сценария в качестве индекса состояния?

1 голос
/ 09 августа 2010

Зачем вам нужно имя переменной для каждого индекса? Почему недостаточно ссылаться, например, на luaMap[0] и luaMap[1]? Я не думаю, что на самом деле есть какой-то способ сделать то, что вы хотите. Вам нужен какой-то динамический массив, например, std :: vector.

0 голосов
/ 07 ноября 2012

GiNaC делает это, но имя должно быть явно задано переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...