【发布时间】:2016-12-01 07:56:53
【问题描述】:
我正在使用增强融合。我想声明一个分配给地图字段并执行各种其他功能的模板函数。我一生都无法弄清楚如何获取存储在 fusion::map 中的元素类型。我确信这是可能的——我只是无法理解文档。我认为我有两个问题:
- 我可能没有包含正确的标题 - 编译器抱怨类型不完整: boost::fusion::extension::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);
}
应声明函数 Add 以接收一个参数,该参数是 gray 字段的类型(示例中为 int)。
【问题讨论】:
-
根据文档,
value_of_data仅用于迭代器。我认为您想要的元功能是value_at_key。如果是,请回答这个问题,因为我现在不能。
标签: c++ templates boost boost-fusion