boost的fusion篇之container
来源:互联网 发布:java企业开发平台 编辑:程序博客网 时间:2024/04/30 03:33
fusion的意思是融合,将很多的模板技术融合进来,fusion中划分了很多的子模块,包含适配器模块(adapter)、算法模块(algorithm)、容器(container)、函数功能(functional)、迭代(iterator)、元编程(mpl)、序列(sequence)、元祖(tuple)、视图(view),今天就简单说下fusion的容器模块,fusion的容器跟咱们使用的tuple很类似,而且fusion的容器还引入了迭代的概念。所以其操作模式跟STL的vector非常相似。tuple的核心机制,我在TypeList的实现中已经说过,其核心是利用TypeList的列表递归特性,加上GenScatterHirerarchy通过模板的模板参数来生成的,有兴趣的请查看我博客里Loki关于TypeList的说明部分。情况如下fusion的vector的使用说明:
vector<int, float> v(12, 5.5f);std::cout << at_c<0>(v) << std::endl;std::cout << at_c<1>(v) << std::endl;
可以看出其实fusion的用法和tuple是非常相似的,采用模板参数构造的矢量容器,然后通过索引值来递归出数据结果。这里at_c这个模板函数的功能其实和Loki中Filed的函数功能是一样的,都是通过内部的模板推到将其强制转换,由于vector的形成是通过不规则的继承关系过来的相当于有这么一个结构体
struct NullType
{
};
struct s1 :public NullType
{
int m_value;
};
struct s2 : public NullType
{
float m_value;
};
struct s :public s1, public s2
{
};
而这里的s就相当于执行了typedef vector<int, float> s;的操作。由于成员变量名称一样,所以在取值的时候就不能直接取了,要么将其转换为基类对象然后取值,否则同名的就会出现歧义。而at_c的功能就是通过索引来取得基类的类型,然后将其强制转换推到出目的类型,将值取出。
1 0
- boost的fusion篇之container
- boost学习笔记之Pointer Container库
- Boost 的 STL Container 切割工具(上):split
- Boost 的 STL Container 切割工具(中):Tokenizer
- Boost 的 STL Container 切割工具(上):split
- compiz fusion 的快捷键
- fusion-icon的问题
- STL container 之 vector的实现
- Fusion
- 黑客入门之fusion level01
- 黑客入门之fusion level02
- boost之scoped_array的使用
- boost之filesystem的使用
- boost 之定时器的使用
- boost之scoped_array的使用
- boost之bind的使用
- container-fluid container的区别
- 这是装好compiz-fusion的样子
- 网秦应就造假事件向股民道歉
- 群硕软件开发(上海)有限公司 怎么样?
- CoreGraphics之CGContext绘图 - iOS开发
- virtualbox中如何增加虚拟机ubuntu的硬盘
- Android上访问Java做的WebService获取JSON数据的方法及org.xmlpull.v1.XmlPullParserException异常处理
- boost的fusion篇之container
- Javascript事件简介+取消默认动作
- 第五周作业——有向图邻接表表示及反向图构造
- linux怎么挂载U盘
- ruby学习笔记(11)--symbol与hash参数
- jogamp第一课显示一个黑黑的窗口
- 腾讯、百度、阿里面试经验—(3)
- HQL分页查询
- 面向对象程序设计核心内容小总结