luabridge不是一个陌生的名字,GIT上已经有3-4年多没有更新。将lua和C++相互调用封装的很方便,比如以下示例代码:

//
// test code for luabridgeclass A
{
public:A(){}~A(){}public:std::string get_title() const{return title;}void set_title( const std::string& s ){title = s;}private:std::string title;
};class B : public A
{
public:B() : A(){}~B(){}
};void trace( const std::string& strOutput)
{OutputDebugStringA(strOutput.c_str());OutputDebugStringA("\n");
}class lua_test
{
public:lua_test() : L_(0), B_(){L_ = luaL_newstate();  luaL_openlibs(L_);luaopen_string(L_);luabridge::getGlobalNamespace( L_ ).addFunction( "trace", trace ).beginNamespace( "test" ).beginClass< A >( "A" ).addConstructor <void (*) (void)> ().addProperty( "title", &A::get_title, &A::set_title ).endClass().deriveClass< B, A >( "B" ).addConstructor <void (*) (void)> ().endClass().endNamespace();}~lua_test(){lua_close( L_ );}bool run( ) {luabridge::setglobal<A*>( L_, (A*)&this->B_, "classb" );B_.set_title( "B.title ");std::string lua_string;FILE* f = fopen( "D:/test.lua", "r" );if( f ) {char buf[2048] = {0};int r = fread( buf, 1, sizeof( buf ), f );if( r > 0 ) lua_string = std::string( buf, r );fclose( f );f = 0;}try{//2.加载Lua文件  int bRet = luaL_loadstring( L_, lua_string.c_str() );  if(bRet) {  OutputDebugStringA(lua_tostring( L_, -1 ) );return false;}//3.运行Lua文件   CHttpCall::~CHttpCallbRet = lua_pcall( L_, 0, 0, 0);  if(bRet)  {OutputDebugStringA(lua_tostring( L_, -1 ) );return false;}} catch (...) {OutputDebugStringA( lua_tostring( L_, -1 ) );}return true;}private:lua_State* L_;B B_;
};

// 运行代码

lua_test t;
  t.run();

lua_test 打开D:/test.lua文件并执行test_func方法,该方法创建了一个B的实例并打印实例的title属性以及全局对象classb的title属性

test.lua:

function test_func()local a = test.B();a.title = "abcdefg";trace( a.title )trace( classb.title );
endtest_func();

在此记录一下。

转载于:https://www.cnblogs.com/lovelylife/p/5436056.html

LuaBridge 中C++类和继承示例相关推荐

  1. python 基类 派生类_在Python中具有两个子(派生)类的继承示例

    python 基类 派生类 In this program, we have a parent class named Details and two child classes named Empl ...

  2. 对于python 3.x与python2.x中新型类的继承特性总结

    (1)一般性继承特性 """ 该文件对于python 3.x 及python 2.x的New-style 类的一般性继承特性进行了说明和测试. (1)实例的继承特性:搜寻 ...

  3. js中的类、继承、闭包

    一.js中的类 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一种基于对象(obje ...

  4. java中阻止类的继承

    1.使用final来修饰类 final表示这个类是继承树的末端,不能被继承. 2.将类的构造方法声明为private的,再提供一个static的方法来返回一个类的对象. JAVA语言要求继承时必须在构 ...

  5. Python 中的类与继承

    类的定义以及实例的建立 Python中,类通过 class 关键字定义. 例如最简单的一个类定义可以为: class Person(object):pass Python 的编程习惯,类名以大写字母开 ...

  6. 关于js中的类式继承

    //父类 function Aa(){ this. name= "小名"; }; Aa. prototype. showName= function(){ return this. ...

  7. java 类继承实例_java继承例子代码,java类的继承示例

    下面要给大家带来的是一个java类的继承的例子,一起来看看详细的代码吧! 一.题目 1.定义一个Person类,这个类的属性有三个,分别是name.age.color. 类有构造方法给三个属性赋值. ...

  8. java中的类的继承_Java中类的继承

    一.子类继承父类的写法 class 子类名 extends 父类名{} 复制代码 二.子类与父类之间的关系 ①父类可以有个子类 ②子类只能有一个父类 ③子类会继承父类的一些属性和方法 ④子类在创建对象 ...

  9. java中的类的继承_再谈Java中类的继承

    上篇博客谈到了Java中类的继承,但是那些远远不能满足我们在实际操作中的需要,那么怎么才能让子类的功能更强大,并且具有父类的属性呢? 一: 父类 1 public classA {2 3 final ...

最新文章

  1. 如何赋能零售行业数字化转型? SAP从这些方向发力
  2. 听说你想从事中间件开发?
  3. p5js可以在linux上运行吗,在linux上使用python运行phantomjs
  4. python多进程存储数据_python – 多进程还是多线程? – 并行化数百万次迭代的简单计算并将结果存储在单个数据结构中...
  5. 禁用UpdateOrchestrator重新启动任务
  6. 如何在Windows下发布QT应用程序
  7. springmvc集成shiro登录失败处理
  8. rsync数据同步工具
  9. 【Webcam设计】相机底层工作流程,编程模型
  10. opencv实现图片的任意角度旋转
  11. 修改devcpp5.11的语言选项
  12. 简谈PCB设计软件对比
  13. 计算机课签到本,大学课堂点名技术日新月异:电脑摇号扫码上课
  14. Visio 直角连接线增加直角拐弯的方法, 取消自动附着,取消自动捕捉
  15. 数据分析师如何度过互联网寒冬
  16. RPM包安装相关命令
  17. 微信小程序订单展示(3)
  18. Google新闻vs门户新闻:决裂还是共存
  19. 吴裕雄--天生自然 高等数学学习:导数的几何意义
  20. php编写跑马灯,使用C++的编程风格写一个跑马灯的例程

热门文章

  1. liferay6.2导出excel
  2. MAVEN 傻瓜式快速教程
  3. c++中判断某个值在字典的value中_Python核心知识系列:字典
  4. 【机器学习】层次聚类
  5. DOS网络命令 之 ping
  6. python编程-迭代器(类,方法,继承),函数,数据结构,
  7. 使用github pages创建博客
  8. TensorFlow学习笔记(二十六)CNN的9大模型之LeNet5的原理讲解
  9. 使用setInterval对ajax请求做轮询
  10. 分布式系统概念:一致性协议、一致性模型、拜占庭问题、租约、副本协议