使用luabind完成c++和lua脚本调用示例备份

C++程序调用lua脚本并返回相应的值,和在lua中调用c++ 注册的函数和类型搞明白了。备份一下。



extern "C" {
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#include
#include
void greet()
{         std::cout << "hello world!\n";
}
int add(int a,int b)
{
return a+b;
}
class User
{
private:
  User():id(0){ }
  ~User(){}
  static User* instance;
  int id;
public:
  static User& Instance(){
   if(!instance)
   {
    instance = new User;
    if(instance)return *instance;
   }
   return *instance;
  }
  int Id(){ return id;}
  void setid(int _id){ id = _id;}
};
User* User::instance = NULL;
/////////////脚本函数///////////////
User& instance()
{
return User::Instance();
}
////////////////////////////
extern "C"
int init(lua_State* L)
{         using namespace luabind;
open(L); 
lua_cpcall(L,luaopen_base,0);
module(L)  
  [     
  def("greet", &greet), 
  def("add",&add),     
  def("instance",&instance)     
   ]; 
module(L)
  [
  class_("User")
  .def("Id", &User::Id)
  .def("setid", &User::setid)
  ];
return 0;
}
int main()
{
lua_State* L = luaL_newstate();
init(L);
int ret = luaL_dofile(L, "test2.lua");
if(ret!=0){
  printf("执行LUA脚本文件出错:%s\n",lua_tostring(L,-1));
}
int res = luabind::call_function(L,"Int", 2, 23);
  printf("执行LUA脚本文件:%u\n",res);


lua_close(L);

return 0;
}
编译命令 g++ lua2.cpp -o lua2 -I/usr/local/include  -L/usr/local/lib  -llua -lluabind



lua脚本如下



greet()
print(add(2,4))
user = instance()
user:setid(4)
print(user:Id())




function Int(a, b)
return a*b
end


更多详细  http://www.cppblog.com/liangairan/articles/71131.html

你可能感兴趣的:(lua)