本文主要介绍lua绑定C++对象的原理和方法,并能在C/C++定义类和方法,在lua中创建C++类的句柄实例,像面向对象一样去使用C++类实例。为了便于大家理解,系列文章会从基础知识讲解,并通过多个版本的进化,一步步完成从基础到多版本实践的完美结合和深入,彻底理解lua绑定C++对象的原理方法。在阅读本系列文章前,需要具备一定的lua开发经验以及lua与C/C++相互调用操作的知识。
1、基础C/C++和Lua的相互引用调用
我们知道C和lua相互调用,是通过虚拟栈进行数据传递通信的,基础介绍介绍就不在这里赘述。这里介绍一个C函数print_stack和一个lua函数print_tree。
- print_stack
它能够打印出stack当前的状态,方便使用的过程进行调试,我们知道lua虚拟栈是push数据是从下往上的,最顶上的的index为-1,下面的代码是从最顶往下打印。
基本代码文件:comm.h
1 #include <iostream>
2 #include <cstring>
3 #include <stdlib.h>
4 extern "C" {
5 #include <lua.h>
6 #include <lualib.h>
7 #include <lauxlib.h>
8 }
9
10 using namespace std;
11
12 /*
13 * #define LUA_TNIL 0
14 * #define LUA_TBOOLEAN 1
15 * #define LUA_TLIGHTUSERDATA 2
16 * #define LUA_TNUMBER 3
17 * #define LUA_TSTRING 4
18 * #define LUA_TTABLE 5
19 * #define LUA_TFUNCTION 6
20 * #define LUA_TUSERDATA 7
21 * #define LUA_TTHREAD 8
22 * */
23
24 char* get_val(lua_State *L, int idx)
25 {
26 static char sData[32];
27 sData[0] = '