Команда (фрилансеры)

Набираем команду фрилансеров, Вы:

  • Программист,
  • Дизайнер,
  • SEO-специалист,
  • Менеджер

Разработка на заказ

Наша команда фрилансеров выполнит
работы на заказ:

Создание и раскрутка сайтов
Разработка приложений (мобайл, десктоп, сервер)
Разработка игр (веб, мобайл, 3D)
Аутсорсинг, фриланс

Контакты
vk.com/sitev_ru
Skype: sitev.ru
E-mail: mike@sitev.ru
github.com/sitev

Рейтинг@Mail.ru

Besucherzahler
счетчик посещений
Сайт на C++
Наш сайт работает на C++ и это очень круто! =))

Lua + C++ (LuaBridge)

Зачем использовать Lua в программах на C++? На нём можно писать конфигурационные файлы, например:

window = {
	title = "sitev.ru",
	size = {
		width = 400,
		height = 300
	}
}

Установка Lua + LuaBridge

Качаем отсюда http://luabinaries.sourceforge.net/ и https://github.com/vinniefalco/LuaBridge .

Я установил их в папку C:\projects\lib и подключил следующие пути для исходников:

C:\projects\lib\lua\files\include
C:\projects\lib\LuaBridge\Source

и для библиотек:

C:\projects\lib\lua\files\lib

Не забывайте настроить пути к lua5.1.dll и lua51.dll. Самое простое - скопировать их в папку проекта.

Проверим, как работает установка. Для этого напишем тестовый файлик на Lua, script.lua:

window = {
	title = "sitev.ru",
	size = {
		width = 400,
		height = 300
	}
}

hello_world_sum = function(a, b)
    printMessage("Hello, world!")
    return a + b
end

Напишем программу на С++ для работы с этим скриптом на Lua:

#include "stdafx.h"
#pragma comment (lib, "lua51.lib")

// main.cpp
#include <iostream>
using namespace std;

extern "C" {
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
#include <LuaBridge/LuaBridge.h>

using namespace luabridge;

void printMessage(const std::string& s) {
	cout << "print = " << s << endl;
}

int main() {
	lua_State* L = luaL_newstate();

	luaL_openlibs(L);
	lua_pcall(L, 0, 0, 0);

	luaL_dofile(L, "script.lua");

	getGlobalNamespace(L).addFunction("printMessage", printMessage);

	LuaRef win = getGlobal(L, "window");
	LuaRef title = win["title"];
cout << "Title: " << title.cast<string>() << endl;
	LuaRef size = win["size"];
	LuaRef width = size["width"];
	cout << "Width = " << width.cast<int>() << endl;
	LuaRef height = size["height"];
	cout << "Height = " << height.cast<int>() << endl;
	
	LuaRef hello_world_sum = getGlobal(L, "hello_world_sum");
	int result = hello_world_sum(1, 2);
	cout << "Result = " << result << endl;

	getchar();
}

Отлично, работает!

Но меня смущает какой-то не читабельный код и отсутствие ООП. Я как специалист по созданиям обёрток быстренько слабал её: https://github.com/sitev/lua_wrap

Теперь, используя мою обёртку, можно написать более читабельный код:

#include "lua_wrap.h"

#include <string>
#include <iostream>
using namespace std;

#pragma comment (lib, "lua51.lib")
#pragma comment (lib, "lua_wrap.lib")

void printMessage(const std::string& s) {
	cout << "print = " << s << endl;
}

int main() {
	Lua lua;
	lua.open("script.lua");
	
	lua.addFunc("printMessage", printMessage);

	auto win = lua.get("window");
	auto title = win["title"];
	cout << "Title: " << title.cast<string>() << endl;

	auto size = win["size"];
	auto width = size["width"];
	cout << "Width = " << width.cast<int>() << endl;

	auto height = size["height"];
	cout << "Height = " << height.cast<int>() << endl;

	auto hello_world_sum = lua.get("hello_world_sum");
	int result = hello_world_sum(1, 2);
	cout << "Result = " << result << endl;

	return 0;
}

Стоит ли использовать Lua в своих C++ программах каждый выбирает сам. Но мне такая идея кажется даже очень интересной!


Отправить комментарий
Наш проект: язык Cj
Cj - язык программирования (C++ & Javascript)
Новый язык программирования, для разработки веб, мобайл, десктоп-приложений, игр... подробнее...

Хотите поддержать проект?

  • Оставляйте ссылки на наш сайт
  • Станьте спонсором проекта
подробнее...

Концепция SITEV.ru

SITEV.ru - это социальная сеть для ИТ-специалистов (программистов, дизайнеров, seo-специалистов, рекламных менеджеров, маркетологов), в том числе фрилансеров, бизнесменов... а также обычных пользователей, для которых и делается ИТ