Luaさわってみた。

ただ計算するだけ。ここから
http://luabinaries.luaforge.net/download.html
lua5_1_4_Win32_dll8_lib.zip を解凍して適当なフォルダに置いてインクルードパスを通して、プロジェクトフォルダ内に以下二つを入れれば動く。

  • lua5.1.dll
  • lua51.dll

難しい使い方はまだ分からないけど、これだけでも外から読んできたテキスト動かしたりいい感じ。

//=============================================================================
// ExLua.h
//=============================================================================
#include <lua.hpp>
#pragma comment(lib,"lua51.lib")
//このコードはC++です
extern "C" {
	#include "lua.h"
	#include "lualib.h"
	#include "lauxlib.h"
};

//Luaで計算したいクラス
class ExLua{
private:
	lua_State *L;
public:
	ExLua(void){
		L = lua_open();
		luaL_openlibs(L);
	};
	~ExLua(void){
		lua_close(L);
		L = 0;
	};
	//計算する
	void exp(const char* str){
		luaL_dostring(L,str);
	}

	//値を返してもらう
	template<class T>
	T get(const char* str){
		lua_getglobal(L, str);
		T t = (T)lua_tonumber(L, -1);
		lua_pop(L,-1);//いちいちポップしないと落ちるわけではない。たまったらポップくらいでいいのかな。
		return t;
	}
};

//=============================================================================
// main.cpp
//=============================================================================
#include <iostream>
#include "ExLua.h"

int main(void){
	ExLua l;
	//計算式を突っ込む
	l.exp("a = 10");
	l.exp("b = 5");
	l.exp("c = a + b");
	l.exp("d = 7.7");

	//値を取り出す
	std::cout << l.get<int>("a") << std::endl;
	std::cout << l.get<int>("b") << std::endl;
	std::cout << l.get<int>("c") << std::endl;
	std::cout << l.get<double>("d") << std::endl;
	std::cout << l.get<int>("d") << std::endl;

	std::cout << "hello" << std::endl;
	char c;
	std::cin >> c;
}