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;
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的功能就是通过索引来取得基类的类型,然后将其强制转换推到出目的类型,将值取出。
boost的fusion篇之container,布布扣,bubuko.com
原文:http://blog.csdn.net/davidsu33/article/details/23251461