当前位置: 首页 > news >正文

合作网站建设百度博客网站模板

合作网站建设,百度博客网站模板,毕业网站建设开题报告,wordpress中文商城主题系列文章目录 lua调用C/C的函数,十分钟快速掌握 C调用lua脚本,包括全局函数绑定、类绑定,十分钟快速掌握 系列文章目录摘要环境使用步骤码代码自定义函数多返回值变长参数 自定义类test_sol2.lua内容 程序输出 摘要 在这个快节奏的技术博客…

系列文章目录

lua调用C/C++的函数,十分钟快速掌握


C++调用lua脚本,包括全局函数绑定、类绑定,十分钟快速掌握

  • 系列文章目录
  • 摘要
  • 环境
  • 使用步骤
  • 码代码
    • 自定义函数
      • 多返回值
      • 变长参数
    • 自定义类
    • test_sol2.lua内容
  • 程序输出


摘要

在这个快节奏的技术博客中,我们将借助sol2库,以十分钟的时间快速掌握如何在C++中调用Lua脚本。sol2是一个轻量级的Lua绑定库,它简化了C++与Lua之间的交互,使得全局函数和类的绑定变得异常简便。我们将创建几个”复杂的“函数,变长参数、多返回值,和一个具有几个成员函数的简单类,通过sol2的简洁语法,只需几行代码,我们就能将C++函数绑定到Lua环境中,实现跨语言调用。

为了快速输出我们要讲的内容,我不仅提供了实际的示例代码,还将解释每一步的操作,确保能够迅速理解并运用这一技术。通过这十分钟的快速掌握,希望将能够在项目中充分发挥C++与Lua的优势,实现更灵活、高效的代码编写。无论是全局函数的调用还是类的绑定,sol2为C++与Lua的融合提供了一种极具便利性和效率的解决方案。

环境

工具\组件版本说明
Windows10
visual studio2022
lua5.4
sol23.2.3
C++17sol2需要

使用步骤

lua头文件和静态链接库或者动态库,从官方网站下载预编译好的即可,当然如果你有自定义需求也可自行修改编译。

引入sol2头文件,从github上下载。

# 就是这三个文件,要按此层次结构放好。
│  sol.hpp
│
└─solconfig.hppforward.hpp

visual studio新建个项目,C++语言标准设置为C++17。

加入头文件和库文件到项目中。

接下来就是码代码了。


码代码

自定义函数

多返回值

通过使用sol2我们不需要自己再写包装方法,这一下就省了不少代码。

std::tuple<int,const char*, double> multipleResultFunc(int a, const char* b, double c)
{//return std::tuple<int, char*, double>(a, b, c);return std::make_tuple(a, b, c);
}

变长参数

int variaArgs(sol::variadic_args va)
{int r = 0;for (auto v : va){r += static_cast<int>( v);}return r;
}

自定义类

	class my_class{private:std::string m_str;public:int b = 24;int f() const{return 24;}void g(){++b;}void setTitle(const char* str){this->m_str = str;}void print(){std::cout << this->m_str << " , " << this->b << std::endl;std::wcout << this->rowname << L" , " << typeid( this->columns).name() << std::endl;}}
#define SOL_CHECK_ARGUMENTS 1
#include "sol.hpp"sol::state lua;lua.open_libraries(sol::lib::base);// "bark" namespacing in Lua// namespacing is just putting things in a tablesol::table bark = lua.create_named_table("bark");bark.new_usertype<my_class>("my_class","f", &my_class::f,"g", &my_class::g,"setTitle", &my_class::setTitle,"print", &my_class::print//,//"putUnsetValue", &my_class::putUnsetValue//,//"setSome", &my_class::setSome); // the usuallua.set_function("multipleResultFunc", multipleResultFunc);lua.set_function("variaArgs", variaArgs);// load and execute from filelua.script_file("test_sol2.lua");

test_sol2.lua内容

obj = bark.my_class.new()
obj:g()
local result =obj:f()
obj:setTitle("I am Tom , and you ?")
print(">>>>>>")
obj:print()bark.print_my_class(obj)
print(result)print(bark.add_two_number(1,2))mr, mr2, mr3 = multipleResultFunc(11, "Jerry", 123.45)
print(mr, mr2, mr3)
print(mr)print("call variable args function", 1, 2, 3, 4)
local r= variaArgs(1,2,3,4)
print(variaArgs, r)

程序输出

=== namespacing ===
I am Tom , and you ? , 25, class std::vector<unsigned long,class std::allocator<unsigned long> >
my_class { b: 25 }
24
3
11      Jerry   123.45
11
call variable args function     1       2       3       4
function: 0102B030      10
C source output Your name is Michael, and 2323 years old.
http://www.yayakq.cn/news/515735/

相关文章:

  • 撸撸撸做最好的导航网站个人网站怎么制作成图片
  • 怎么做付费的小说网站自己的做网站
  • 化妆品网站建设案例怎样优化网站
  • 网站建设方案费用预算企业管理咨询服务合同模板
  • 千助网站建设长沙小学网站建设
  • 做石材一般用哪些网站推销做公司网站的公司有哪些
  • 微信网站开发服务关于网站建设的论文题目
  • 国外网站怎样建设wap网站分享代码
  • 和平网站建设公司舟山城乡建设培训中心网站
  • 寻找项目做的网站中山建设银行招聘网站
  • wordpress 关闭访问网站推广优化设计方案
  • 建设工程监理 精品课网站免费网络课程平台
  • 互联网站从事登载新闻业务管理暂行规定外包小程序开发注意事项
  • 精品网站建设公中国艺术设计联盟
  • 北京网站建设哪个好百度免费网站如何建设
  • php网站开发实验报告建设通银行官方网站
  • 个人网站上传有啥要求折纸效果网站
  • 公司付的网站费怎么做分录苏州有哪些做网站公司好
  • 用html做网站顺序二手书屋网站开发的意义
  • 网站 app建设开发合作协议中文域名和网站的关系
  • 毕业设计网站开发流程图西安网站建设xazxcy
  • 网站建设对于企业发展的优势平面设计好找工作不
  • wordpress 修改语言包百度首页排名优化服务
  • 浅蓝色.net企业网站源码带后台flash成品网站
  • 万网建站流程网站优化页面
  • 小说网站分页关键字怎么做域名查询 站长查询
  • 网站模块功能北京建设网站的公司兴田德润简介
  • 深圳视频网站开发软件开发公司流程
  • 网站备案链接直接查看asp网站开发 基础
  • 网站建设和运营的课程做网站做什么好