游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2249|回复: 3

迷恋于boost::any

[复制链接]

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2005-2-22 17:43:00 | 显示全部楼层 |阅读模式

终于能上网了,
在网上耗了很多时间。
这是最后一贴。

曾经被boost库中的种种功能吸引,
一直都想学一学,
但是都没有什么机会。

最近因为需要,接触了几乎最简单的boost::any这个功能

彻底折服于boost了。
以前写接口时,因为不确定类型就要重载好多函数。
如果增加一种类型还要增加一个重载函数。

用void *传递指针太不安全,而且还要附加一个类型信息。
还有,什么时候释放内存也很麻烦。

用RTTI的运行期类型识别是很安全了,不过因为需要有需函数的类才能使用RTTI.
所以对于基本类型还是没辙。

以前也曾考虑过用模板,不过写完之后乱七八糟的,自己都看不明白。

boost::any就解决了所有问题,我不是做广告阿。

any就是任意类型,可以int,...... 因为是用模版实现,不仅保证了效率,而且支持任何类型数据。

其实any主要就一个相关函数和几个方法。

boost::any a=int(12);
if(a.type()==typeid(int))
        cout<<boost::any_cast<int>(a);
a=std::string("sdf")
if(a.type()==typeid(std::string))
        cout<<boost::any_cast<std::string>(a);

但是和其他数据结构结合起来,能实现充满想象力的数据结构。
比如
std::map<std::string,boost::any> tree;

这是一个用c++字符串作为键值的树,

因为 boost::any是任何类型,当他值为std::map<std::string,boost::any>时候
就形成一个递归一样的结构,我也说不好什么名次,就好像分型图一样,整个是一个树,每个子节点又是一个一样的树。
关键是这个树可以储存任何类型。

可能你暂时不会想到有什么用途。

但是在我写的程序中,从脚本读出来的数据可能是任何类型的。
Lua脚本语言 只有一种数据结构就是tables
tables又有键值 他的值又是数字,字符串,bool等。

和刚才说明的std::map<std::string,boost::any> tree;类型是可以对应上的。
我从Lua脚本传来的数据储存在tree中,我想象不到什么样的结构能更恰当的储存tables了。

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2005-2-22 17:55:00 | 显示全部楼层

Re:迷恋于boost::any

补充一句
现在很多库很好用
正则表达式,序列化等等
是不是 这些功能都加给C++之后
C++就和动态语言一样强大了呢。
然后效率也降低到动态语言一样了。

不过总的感觉 C++是上得了厅堂下得了厨房的贤内柱了。
阿,这个才是最后一贴阿

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2005-2-22 18:12:00 | 显示全部楼层

Re:迷恋于boost::any

any是不错的东西,以前学的都忘了

90

主题

797

帖子

833

积分

高级会员

论坛版主

Rank: 4

积分
833
QQ
发表于 2005-2-22 19:45:00 | 显示全部楼层

Re:迷恋于boost::any

呵呵。有时间的话,可以把经验贴上一些嘛
boost.python也不错。有时候lua还是不方便,呵呵
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 11:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表