该实现的特性
- 支持类似C++的 new() 和 delete() 函数
- 构造(ctor)和析构(dtor)函数会自动按C++顺序调用(ctor从最底层基类开始调用,dtor从高上层派生类调用)
- 派生类中可以访问被覆盖的子类方法
实现代码
function class(super)
local cls = {}
if super then
setmetatable(cls, {__index = super})
cls.super = super
end
function cls.new(...)
local instance = setmetatable({}, {__index = cls})
--instance.class = cls
local create
create = function(c,...)
local superCls = rawget(c, "super")
if superCls then
create(superCls,...)
end