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

//////////////////////////////////////////////////////////////////////////
// test code for luabridge class 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_()
, 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[] = {};
int r = fread( buf, , sizeof( buf ), f );
if( r > )
lua_string = std::string( buf, r );
fclose( f );
f = ;
} try
{
//2.加载Lua文件
int bRet = luaL_loadstring( L_, lua_string.c_str() );
if(bRet) {
OutputDebugStringA(lua_tostring( L_, - ) );
return false;
} //3.运行Lua文件 CHttpCall::~CHttpCall
bRet = lua_pcall( L_, , , );
if(bRet)
{
OutputDebugStringA(lua_tostring( L_, - ) );
return false;
}
} catch (...) {
OutputDebugStringA( lua_tostring( L_, - ) );
}
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 );
end test_func();

在此记录一下。

LuaBridge 中C++类和继承示例的更多相关文章

  1. 关于Python中的类普通继承与super函数继承

    关于Python中的类普通继承与super函数继承 1.super只能用于新式类 2.多重继承super可以保公共父类仅被执行一次 一.首先看下普通继承的写法 二.再看看super继承的写法 参考链接 ...

  2. JavaScript中的类式继承和原型式继承

    最近在看<JavaScript设计模式>这本书,虽然内容比较晦涩,但是细品才发现此书内容的强大.刚看完第四章--继承,来做下笔记. 书中介绍了三种继承方式,类式继承.原型式继承和掺元类继承 ...

  3. java中阻止类的继承

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

  4. ES6中的类和继承

    class的写法及继承 JavaScript 语言中,生成实例对象的传统方法是通过构造函数.下面是一个例子     function Point(x, y) {  this.x = x;  this. ...

  5. [Android Studio] Android Studio中查看类的继承关系

    转载自:http://blog.csdn.net/hyr83960944/article/details/38098091 查看类的继承关系的快捷键F4,在Android Studio常用快捷键这篇文 ...

  6. Android Studio中查看类的继承关系

    查看类的继承关系的快捷键F4.在Android Studio经常使用快捷键这篇文章中.有写了.今天主要是讲一些关于这个快捷键出来的界面的一些配置.这块功能相对偏冷一些,可能非常多人都会用不到.可是关于 ...

  7. ES5中的类与继承

    最近在重新复习TypeScript,看到类这块的时候自然会和ES5中的类写法进行对比加深印象. 发现ES5的类与继承一些细节还是挺多的,时间久了容易忘记,特此记录下. 首先是ES5的类定义,这没什么好 ...

  8. python中的类与继承

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

  9. ES6中。类与继承的方法,以及与ES5中的方法的对比

    // 在ES5中,通常使用构造函数方法去实现类与继承 // 创建父类 function Father(name, age){ this.name = name; this.age = age; } F ...

随机推荐

  1. 我的MYSQL学习心得(九)

    原文:我的MYSQL学习心得(九) 我的MYSQL学习心得(九) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  2. 工作笔记3.手把手教你搭建SSH(struts2+hibernate+spring)环境

    上文中我们介绍<工作笔记2.软件开发经常使用工具> 从今天開始本文将教大家怎样进行开发?本文以搭建SSH(struts2+hibernate+spring)框架为例,共分为3步: 1)3个 ...

  3. 【转】Oracle修改表空间为自动扩展

    1.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以利用到数据无法写入2)尽量减少人为的维护3)可以用于重要级别不是很大的数据库中,如测试数据库等 2.数据文件自动扩展的弊端1)如果任其扩大,在 ...

  4. 【Linux 工作经常使用命令 】

    1, 批量杀某个程序 比方某个程序叫  url_info.py, 起了若干个进程 . 高速查杀. 先查看 ps aux | grep url_info.py 确认没问题 ,能够杀,则批量kill ps ...

  5. Scala 的 Web 框架 Lift 开始 3.0 版本开发

    Scala 的 Web 框架 Lift 开始 3.0 版本开发 http://demo.liftweb.net/ http://liftweb.net/download Lift 框架在不断的成长和改 ...

  6. SQL Server 创建表分区

    原文:SQL Server 创建表分区 先准备测试表 CREATE TABLE [dbo].[Employee] ( EmployeeNo ,) PRIMARY KEY, EmployeeName ) ...

  7. 18. Scrum敏捷软件开发

      1)柯维定律 2)如何组件敏捷团队? 团队5~9个人,Mike带过最多的是14个人.个人建议,别超过10个.否则沟通的成本直线上升.(团队的午餐,两个匹萨就够了). 引入特性团队(针对于传统的组件 ...

  8. 实用的两款jquery树形tree插件

    这里有两款非常实用的jquery tree控件: (1) ------------------------------------------1.(根据一讲师总结) ---zTree: jquery. ...

  9. 关于ListView中convertView的缓存个数的探究

    在面试的时候经常会被问到一个有关ListView的问题:一个ListView的高度最多可以显示5个item,但是却有20条数据要显示,问最多会有多少个convertView会被复用?或者如在ListV ...

  10. 看精通SQL SERVER2008有感1

    SQLserver数据库中的其他数据库作用: Master:存储SQLserver所有的全局配置,也就是存储SQLserver所知道的关于自己的全部信息,包括自身的配置,和当前的状态,这些数据存储在系 ...