std::map与结构体的互转

这个需求,很早就有了,但当时一直想着有啥变量结构体的方法,也没找到,就耽搁下来了,后面随着对boost一些东西的了解,发现终于可以实现了, 问题描述大概如下,一个已经存在的库a.lib,和服务器通信,全是通过结构体,或者基本数据类型进行的,现在额另外一个框架f,提供了c++和js交 互的方法,但只支持基本数据类型,std 容器,js里面的对象被映射成std::map<string,string>供c++层访问,现在需要通过JS调用a.lib的接口,所以 自然想到的是,做一个中间层,把map转换成struct,还好,a.lib要求的结构体非常简单,所有成员只包括基本数据类型,或者char 数组,并且,不含内嵌结构体
由于已经有了boost::to_string,所以还要写一个from_string的辅助函数,代码如下:

然后是要将map通过key,找到结构体的对应名称的字段,然后把这个值付给它,这里用了boost.pp

只要上面的思路搞清楚了,将结构体的每个字段填充到map里面就相当清晰了

下面是如何使用:注意map转换成结构体之前,必须要清0,否则将有可能导致模板匹配不正确

最后还要针对这个框架,为bool值再做一个特化版本,以下字符被认为是true:”1″, “t”, “true”, “yes”, or “y”,其他的都是false

最后感叹一声,还是boost大法好,自己写了半天,遍历__VA_ARGS__也没写出了,用boost几行代码就搞定了

Copy Protected by Chetan's WP-Copyprotect.