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. 给Notepad++ 6.7 加右键菜单带图标

    使用的是Notepad++ 6.7,下载 NppShell64.dll 和 NppShell.dll方法:将BAT文件和下载的NppShell64.dll 和 NppShell.dll放置Notepa ...

  2. Django----模板

    为了将html页面和python代码分离开来,有必要介绍一下模板的作用,Django中自带很多模板. 以下一个html模板文件: <html> <head><title& ...

  3. Windows下一个ROracle安装与使用

    ROracle一个简短的引论: ROracle这是R连接到接入Oracle数据库DBI(Oracledatabase interface)介面.这是基于OCI一个DBI兼容Oracle司机. 具体见说 ...

  4. Spring之SpringMVC前端控制器DispatcherServlet(源码)分析

    1.DispatcherServlet作用说明 DispatcherServlet提供Spring Web MVC的集中访问点,而且负责职责的分派,而且与Spring IoC容器无缝集成,从而可以获得 ...

  5. 个人实现的一个简单的蜗牛矩阵(c语言)

    #include<stdio.h> #include<stdlib.h> int main(void) { int n,m; int x,y; int **array; int ...

  6. leetcode第十题--Regular Expression Matching

    Problem:Implement regular expression matching with support for '.' and '*'. '.' Matches any single c ...

  7. SQL 中OPENQUERY的使用

    原文:SQL 中OPENQUERY的使用 OpenQuery 是SQL Server用来与其他Server交互的一种技术,通过OpenQuery,SQL Server 可以直接访问其他数据库资源. 而 ...

  8. Mysql基础之字符集与乱码

    原文:Mysql基础之字符集与乱码 Mysql的字符集设置非常灵活 可以设置服务器默认字符集 数据库默认字符集 表默认字符集 列字符集 如果某一个级别没有指定字符集,则继承上一级. 以表声明utf8为 ...

  9. 处理程序“svc-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 解决办法:以管理员运行命令:C: ...

  10. AngularJS+requireJS项目的目录结构设想

    AngularJS+requireJS项目的目录结构设想 准备用AngularJS + require.js 作为新项目的底层框架,以下目录结果只是一个初步设想: /default    放页面,不过 ...