我正在使用增强融合。我想要声明一个模板函数,该函数将分配给地图的一个字段并执行各种其他功能。我不能在我的生活中弄清楚如何获取存储在fusion :: map中的元素的类型。我相信这是可能的 - 我只是无法理解文档。我想我有两个问题:如何获得boost :: fusion :: map中的值的类型?
- 我可能不会有正确的头包括 - 编译器抱怨不完全类型: 的boost ::融合::扩展:: value_of_data_impl
- 我并不清楚如何使用result_of,value_of_data等
为了保持这个特定的最小测试用例如下所示。
#include <string>
#include <boost/shared_ptr.hpp>
#include <boost/fusion/include/container.hpp>
#include <boost/fusion/container.hpp>
#include <boost/fusion/iterator.hpp>
using std::string;
using namespace boost;
namespace fields {
struct rgb;
struct gray;
struct keypoints;
struct edges;
struct objects;
}
typedef fusion::map<
fusion::pair<fields::rgb, string>,
fusion::pair<fields::gray, int>,
fusion::pair<fields::keypoints, int>,
fusion::pair<fields::edges, int>,
fusion::pair<fields::objects, double>
> Fields;
Fields A_map;
template<typename field>
void Add(fusion::result_of::value_of_data<field> data) {
fusion::at_key<field>(A_map) = data;
}
int main() {
Add<fields::gray>(123);
}
功能添加应宣布为接收参数,该参数是灰色场(在本例INT)的类型。
根据文档'value_of_data'仅用于迭代器。我认为你想要的元函数是'value_at_key'。如果是这样,请回答这个问题,因为我目前无法回答。 – llonesmiz