长风破浪会有时,直挂云帆济沧海

Dream Word

博客园 首页 新随笔 联系 订阅 管理

直接上代码:

1:c++代码

    • #include <lua.hpp>
      #include <LuaBridge/LuaBridge.h>
      
      #include <iostream>
      #include <string>
      
      class A
      {
      public:
              void action()
              {
                      std::cout<<"Hello I am A\n";
              }
      
              virtual void doPrint(int a,int b)
              {
                      std::cout<<"in A a:"<<a<<"b:"<<b<<std::endl;
              }
      
              std::string goodMan() const
              {
                      return "goodman";
              }
      };
      
      class B : public A
      {
      public:
              void hello(const std::string& info) const
              {
                      std::cout<<"hello:"<<info<<std::endl;
              }
      
              virtual void doPrint(int a, int b) override
              {
                      std::cout<<"in B just"<<(a + b) <<std::endl;
              }
      };
      
      void globalFunction()
      {
              std::cout<<"hello this is a global func\n";
      }
      
      bool reloadLuaScript(lua_State* L, const std::string& luafile)
      {
              int state = luaL_dofile(L, luafile.c_str());
              if(state != LUA_OK)
              {
                      return false;
              }
              return true;
      }
      
      void registerClassAndFunctions(lua_State* L)
      {
              using namespace luabridge;
              //注册全局函数和类函数
              getGlobalNamespace(L).addFunction("gloabalFunction",globalFunction); 
              getGlobalNamespace(L)
                      .beginClass<A>("A")
                      .addFunction("action",&A::action)
                      .addFunction("doPrint", &A::doPrint)
                      .addFunction("goodMan", &A::goodMan)
                      .endClass()
                      .deriveClass<B,A>("B")
                      .addFunction("hello", &B::hello)
                      .endClass();
      }
      
      void testCallLua(lua_State* L)
      {
              A a;
              lua_getglobal(L,"testA");
              luabridge::push(L, &a);
              lua_pcall(L,1,0,0);
      }
      
      int main(int argc, char** argv)
      {
              lua_State* L = luaL_newstate();
      
              luaL_openlibs(L);
              std::cout<<"try load file "<<argv[1]<<std::endl;
      
              auto ok = reloadLuaScript(L, argv[1]);
              if(!ok)
              {
                      std::cout<<"load lua file failed\n";
              }
              else
              {
                      registerClassAndFunctions(L);
                      testCallLua(L);
              }
              lua_close(L);
              L = nullptr;
      }
      

 

2:Lua代码

    • --print("hello");
      --[[
              this is note
              这个是多行注释
      --]]
      print("This is myWorld!\n");
      function testA(a)
              a:action();
              a:doPrint(1,2);
      end
      ~                                                                                                                                                                                                                 
      ~       
      

3:编译运行

    • [root@10-120-10-106 NewChart]# g++ -std=c++11 -o testlua testLua.cpp -llua -ldl
      [root@10-120-10-106 NewChart]# ./testlua abc.lua 
      try load file abc.lua
      This is myWorld!
      
      Hello I am A
      in A a:1b:2
      

        

posted on 2018-08-02 15:43  长风II  阅读(305)  评论(0编辑  收藏  举报