Вы можете взять свою функцию как есть и обернуть ее. Я имею в виду один способ, который полностью инкапсулирует обертку, - это сделать вашу функцию статическим членом локального класса. Для демонстрации:
int countRecursive(int cancelCondition)
{
struct hidden {
static int countRecursive(int cancelCondition, int counter = 0) {
if(cancelCondition > 0)
{
return countRecursive(--cancelCondition, ++counter);
}
else
{
return counter;
}
}
};
return hidden::countRecursive(cancelCondition);
}
Локальные классы - изящная, но редко встречающаяся особенность C ++. Они обладают некоторыми ограничениями, но, к счастью, могут иметь статические функции-члены. Никакой код извне не может передать hidden::countRecursive
недействительный counter
. Это полностью под контролем countRecursive
.
Нам везло с Белкой до сих пор. Lua так популярен, это продвигается к становлению стандартом.
Я рекомендую волноваться больше о памяти, чем скорость. Большинство языков сценариев "достаточно быстро" и если они становятся медленными, можно всегда снижать часть той функциональности назад в C++. Многие из них горят через большую память, тем не менее, и на консоли память еще больше дефицитного ресурса, чем процессорное время. Неограниченное потребление памяти разрушит Вас в конечном счете, и если необходимо выделить 4 МБ только для интерпретатора, это похоже на необходимость бросить 30 структур из окна для создания места.
Lua имеет преимущество того, чтобы быть испытанным многими известными разработчиками видеоигры и хорошей базой хорошо осведомленных разработчиков благодаря принятию Activision снежной бури его как основная платформа для развивающихся стран дополнений Warcraft.
Lua является очень хорошим соответствием для Ваших потребностей. Я возьму их в том же порядке.
Lua является одним из самых быстрых языков сценариев. Это быстро, чтобы скомпилировать и быстро работать.
Lua компилирует на любой платформе с компилятором C ANSI, какой afaik включает все играющие платформы.
Lua может быть предварительно скомпилирован, но как очень динамические языки большинство ошибок только обнаруживаемо во времени выполнения. Также предварительно скомпилированный код (как байт-код) часто больше с точки зрения размера, чем исходный код.
Существует много Lua/C ++ обязательные инструменты.
Это не поддерживает многопоточность (Вы не можете получить доступ к единственному экземпляру интерпретатора от нескольких потоков), но у Вас может быть несколько экземпляров интерпретатора, один на поток, или даже один на игровой объект.
Lua использовались в промышленности видеоигры в течение многих лет. Легкий и эффективный.
Однако ChaiScript и Сокол являются хорошими кандидатами, соответствующими Вашим потребностям и с высокоуровневым языком, чем Lua, но с меньшим количеством истории и общественной поддержки.
Lua и затем LuaJIT для дополнительного blaziness!
просто не ожидайте слишком много от автоматического C++ обязательные библиотеки, большинство медленно и строго. лучше сделайте свою собственную привязку для Ваших собственных объектов.
что касается параллелизма, или LuaLanes или самокрутка. если Ваша программа C++ является уже многопоточной, просто назовите отдельный LuaStates от каждого потока и используйте совместно использованные структуры Вашего собственного C++ в качестве каналов передачи в случае необходимости.
как Вы могли бы уже знать, чаще всего повторный ответ в Lua является 'самокруткой', и это часто - лучший совет! кроме тех случаев, когда это о привязке к общим библиотекам C/C++, в этом случае довольно вероятно, что уже существует один.
Если бы Вы еще не посмотрели на него, я предложил бы, чтобы Вы проверили Angelscript.
Я успешно использовал его в кросс-платформенной среде (Windows и Linux только с перекомпилировать), и это разработано для интеграции хорошо с C++ (оба объекта и код).
Это легко и поддерживает многопоточность (в том смысле, что вопрос задали), работает хорошо и компилирует в код байта, который мог быть сделан заранее.
Запустите с Python.
Если можно доказать, что Вы нуждаетесь в большей скорости, то смотрите на Stackless Python. Это - то, что КАНУН Онлайн использует для их игры.
JavaScript может быть разумной опцией из-за гор усилия, которые вошли в оптимизацию различных реализаций для использования в веб-браузерах.
Они приходят на ум: