BOOST模板库实现的功能与lua在语言层级提供的支持之比较
来源:互联网 发布:蓝月传奇翅膀升阶数据 编辑:程序博客网 时间:2024/05/06 01:37
因为编译器不能升级,所以用了不少boost,与语言层级提供支持,模板库易用性还是大打折扣。比如boost中还算不很复杂的boost::tuple可以让函数返回多个值,同样,lua在语言层面也支持这个功能。std::pair也可包装2个值并返回,但2个以上就不行了。
用boost::tuple:
boost::tuple<int,int> getTwoValue(int a,int b){ return boost::make_tuple (a * 10, b * 20);}int _tmain(int argc, _TCHAR* argv[]){ int a, b; boost::tie (a, b) = getTwoValue (2, 3); std::cout << a << " / " << b << std::endl; return 0;}
这个是lua版本的,精炼的不可以思议,下面是一段完整的代码,变量无需事先声明:
function gettwoValue(x,y) return x*10,y*20 enda,b = gettwoValue(2,3);print(a .. " / " .. b)
使用模板你就得记住模板的名字:boost::tuple,还要记住一些辅助函数boost::make_tuple,boost::tie。而lua啥都不用记,直接就这么用了。
用std::pair的版本,记得模板得设成std::pair<int&,int&>引用的方式(又是一个坑)。总之,用C++的template这种看起来很酷用起来很多坑。
语言的发展,最终应该留下来的,就是像lua这种的,没有一个一个的坑,不用让人时刻保持警惕。又简单,无需大量的记忆。仅仅是一些语法的灵活的使用就能达到神奇的效果。
再看变长参数函数方面,C\C++比较丑陋,C++11在这方面有改进,旧的方式:
template<typename T>T GetMax(int nums,...){ va_list arg_ptr; va_start (arg_ptr, nums); T rst = va_arg (arg_ptr, T); for (int i = 0; i != nums - 1; ++i) { rst = std::max (rst, va_arg (arg_ptr, T)); } va_end (arg_ptr); return rst;}
Lua的的变长参数:
function GetMax(...) local t = {...} local b = t[1] for key,value in ipairs(t) do b = (b > value) and b or value end return b;endprint(GetMax(1,6,41,5,11,2,20))print(GetMax(1,155.001,77.11))
不仅数目同样没有限制,类型也没有限制。C++ 11在这方面有改进,依然没有Lua清晰便捷。
Lua是用C写的,某种程度上Lua是C语言的一个抽象层,业务面窄了,却更专业了
0 0
- BOOST模板库实现的功能与lua在语言层级提供的支持之比较
- 使用boost::enable_if与boost::type_traits在模板中实现对模板类型的接口的限制
- 虚拟机之比较,lua 5 的实现
- 虚拟机之比较,lua 5 的实现
- 利用boost提供的库构建读写锁与互斥锁
- 利用boost提供的库构建读写锁与互斥锁
- 利用golang实现与boost中asio相同的功能
- 在 ios 与 android 同时支持js功能,即web与app的交互功能的实现
- lua的__index提供便利的单继承功能
- Android在未来对Java 8语言功能的支持
- 在LUA中使用GETTEXT实现多语言支持
- 在LUA中使用GETTEXT实现多语言支持
- Windchill 中实现获取带有层级记录的BOM功能
- SourceInsight 增加对Lua语言的支持
- SourceInsight 增加对Lua语言的支持
- struts2 支持velocity的模板布局功能
- RegExp对象提供简单的正则表达式支持功能。
- quick Lua 在Lua中使用gettext实现多语言支持
- dynamic-table-view-cell-height-auto-layout
- 每天专注三件事
- Java中堆栈的提问与回答
- 接口和抽象类有什么区别
- 【test】
- BOOST模板库实现的功能与lua在语言层级提供的支持之比较
- 通过bat脚本修改环境变量并且不用重启立即生效
- 变位词程序的实现
- 线段树成段更新 zoj 1610
- Webdnpro UI控件开发篇 Table控件使用五(Table的单元格使用不同的控件)
- 汇总form表单提交替换按钮为图片
- MTD和MDd导致的问题
- 学嵌入式,为了什么?因为什么要去学嵌入式?
- 利用Matlab实现二叉树的树形显示