tolua 转换 std::shared_ptr
自从c++11以后std::shared_ptr几乎是比用的东西,经常会遇到类似如下应用
std::shared_ptr<Tst_ShareTest> createObject();
类似这样的函数在tolua的转换稍稍有些麻烦,今天做了两个实验,下面简单做个总结,由于进度紧张,这里只是做个笔记,没有详细的叙述和严谨的逻辑,如有问题留言。首先在cpp文件中写出要转换的类如下:
namespace Test {
class Tst_ShareTest
{
public:
void func()
{
std::cout << "TEST!!!!!!" << std::endl;
}
};
std::shared_ptr<Tst_ShareTest> createObject()
{
return std::make_shared<Test::Tst_ShareTest>();
}
}
1. 第一种思路是利用 std::shared_ptr 中的get()函数获取对象指针,再使用,pkg文件中做如下定义
namespace std
{
class shared_ptr
{
TOLUA_TEMPLATE_BIND(T, Test::Tst_ShareTest)
T *get() const;
};
}
可以看到转换后的代码类似如下
const std::shared_ptr<Test::Tst_ShareTest>* self = (const std::shared_ptr<Test::Tst_ShareTest>*) tolua_tousertype(tolua_S,,);
{
Test::Tst_ShareTest* tolua_ret = (Test::Tst_ShareTest*) self->get();
tolua_pushusertype(tolua_S,(void*)tolua_ret,"Test::Tst_ShareTest");
}
也就是说,转换后的代码会生成一个self对象,用这个对象调用get(),因此我们可以在lua代码中这样调用
oj = Test.createObject()
local ojsh = tolua.cast(oj, "std::shared_ptr<Test::Tst_ShareTest>")
ojp = ojsh:get()
ojp:func()
2. 思路二,不想让lua和pkg文件跟std::shared_ptr有太多关联,可以试试用typedef重新定义std::shared_ptr类型。
typedef std::shared_ptr<Tst_ShareTest> ShareTestPtr;
在pkg文件中做如下定义:
class ShareTestPtr
{
public:
Tst_ShareTest *get() const;
} Test::ShareTestPtr createObject2();
在lua中调用方法如下:
oj2 = Test.createObject2()
local ojsh2 = tolua.cast(oj2, "Test::ShareTestPtr")
ojp2 = ojsh2:get()
ojp2:func()
tolua 转换 std::shared_ptr的更多相关文章
- std::shared_ptr 和普通指针的转换
相互转化见示例 struct test { int num; string name; }; test* pTest = new test(); std::shared_ptr<test> ...
- std::shared_ptr<void>的工作原理
前戏 先抛出两个问题 如果delete一个指针,但是它真实的类型和指针类型不一样会发生什么? 是谁调用了析构函数? 下面这段代码会发生什么有趣的事情? // delete_diff_type.cpp ...
- std::shared_ptr(二)
Defined in header <memory> template< class T > class shared_ptr; (since C++11) ...
- std::shared_ptr
在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已.std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移 ...
- (译+原)std::shared_ptr及std::unique_ptr使用数组
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5462363.html 参考网址: http://stackoverflow.com/questions ...
- 巧用std::shared_ptr全局对象释放单例内存
巧用std::shared_ptr 单例的使用相对比较广泛,但是需要在程序退出前调用它的析构函数对数据进行释放,常规做法是在main函数末尾进行释放工作, 但是这样相对比较繁琐,因此便有了利用全局变量 ...
- Item 20: 使用std::weak_ptr替换会造成指针悬挂的类std::shared_ptr指针
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 矛盾的是,我们很容易就能创造出一个和std::shared_ptr ...
- C++11 std::shared_ptr总结与使用
最近看代码,智能指针用的比较多,自己平时用的少,周末自己总结总结.方便后续使用. std::shared_ptr大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用 ...
- std::shared_ptr之deleter的巧妙应用
本文由作者邹启文授权网易云社区发布. std::shared_ptr 一次创建,多处共享,通过引用计数控制生命周期. 实例 在邮箱大师PC版中,我们在实现搜索时,大致思路是这样的: 每一个账号都有一个 ...
随机推荐
- Problem 3: Largest prime factor
The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 60085 ...
- php上传文件配置
根据需要调整php.ini文件内容,完成后重启服务器即可. 上传文件相关配置内容: file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开 upload_tmp_d ...
- 服务集群session问题
1. http协议本身无状态,可通过Session与Cookie记录前端与后端服务器的交互状态: 2. 但是每次客户端回传必须在头信息中带有cookie, 如果session过多,会增加数据传输量: ...
- 文件传输协议(FTP)
文件传输协议(FTP)用于用户在两台主机之间进行远距离的文件传输,并保证传输的可靠性. FTP采用客户机/服务器的方式,由FTP服务器和FTP客户机两部分组成. FTP服务器中以目录结构保存着各种文件 ...
- java第五周作业
Java Applet Applet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程 ...
- bootstrap-edittable 使用笔记之 (select, data,text, number)
可编辑列表的数据格式可以指定,常用的有select, data, text, number.代码如下. 前端代码: <table id="tb_product" class= ...
- C# 延迟函数
#region 延迟函数 public static bool Delay(int delayTime) { DateTime now = DateTime.Now; int s; do { Time ...
- Python之必备函数
1. lambda 表达式 匿名函数(ANONYMOUS FUNCTION)是指一类无需定义标识符(函数名)的函数.通俗来讲,就是它可以让我们的函数,可以不需要函数名. 正常情况下,我们定义一个函数, ...
- 搭建EOS未完
纯净机器上部署 EOS 测试网 演示的系统为 Ubuntu 18.04 LTS,内存8g以上,硬盘300g+ clone EOS代码 们以EOS-Mainnet仓库部署,(EOS-Mainnet是部署 ...
- jQuery-3.事件篇---事件绑定与解绑
on()的多事件绑定 之前学的鼠标事件,表单事件与键盘事件都有个特点,就是直接给元素绑定一个处理函数,所有这类事件都是属于快捷处理.翻开源码其实可以看到,所有的快捷事件在底层的处理都是通过一个&quo ...