LuaのC++ラッパー

最低限の機能しか無いけど、LuaC++ラッパーが完成。
はい、テンプレートとか分かりません…

#ifndef _LUA_HPP_
#define _LUA_HPP_

extern "C" {
	#include "Lua/lua.h"
	#include "Lua/lualib.h"
	#include "Lua/lauxlib.h"
}

#include 

class CLua ;

// desc. Luaに登録する自作関数は、このクラスを継承し、Func()をオーバーライドして書く。
class CLuaFunction {

	// CLuaをフレンドクラスとして登録
	friend class CLua;

public:
	CLuaFunction();
	virtual ~CLuaFunction();

	int GetTop() {
		return lua_gettop (m_L);
	}

	// 引数から値を取得。
	// i : 引数の番号
	int GetBoolean( int i ) {
		return lua_toboolean (m_L, i);
	}
	int GetNumber( int i ) {
		return (int)lua_tonumber (m_L, i);
	}
	const char* GetString( int i ) {
		return lua_tostring (m_L, i);
	}

protected:
	lua_State* m_L;

	// Lua側で関数が呼ばれると、呼ばれる。returnではスタックに積まれた結果の数を返すこと。
	virtual int Func();

private:
	// Luaから飛んでくるポイント。
	static int Entry (lua_State *L);

	// クラスオブジェクトのアドレスを返す。
	CLuaFunction* GetObject() { return this; } 

};

// desc. Luaのステートを保持しているクラス。
class CLua {

public:
	CLua();
	virtual ~CLua();

	// Luaステートを取得。
	lua_State* GetLuaState() { return m_L; }

	// Luaに自作関数を登録する。
	void RegisterFunc( const char* funcname, CLuaFunction* p );
	// こっちは隠し:P
	void RegisterFunc( const char* name, lua_CFunction func );

	// ファイルからLuaスクリプトを読み込み実行。
	int LoadScript( const char* filename );

	// stringバッファのLuaスクリプトを実行。実行したスクリプトの結果は次に残る。
	int ExecScript( const std::string &str );

protected:
	lua_State* m_L;

};

#endif //_LUA_HPP_


使い方の例

#include 
#include "Lua.hpp"

class CMyLuaFunction : public CLuaFunction {

	int Func() {
		puts("CMyLuaFunction");
		printf( " 引数の数=%d\n", GetTop() );
		return 0;
	}

};

void main()
{
	CLua lua;
	CMyLuaFunction func;
	lua.RegisterFunc( "foo", &func );
	lua.LoadScript( "test.lua" );
}