gpt4 book ai didi

c++ - 如何获取 boost::fusion::map 中值的类型?

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:45 25 4
gpt4 key购买 nike

我正在使用 boost fusion 。我想声明一个模板函数,它分配给 map 的一个字段并执行各种其他功能。我终其一生都无法弄清楚如何获取存储在 fusion::map 中的元素的类型。我确信这是可能的——我只是无法理解文档。我认为我有两个问题:

  1. 我可能没有包含正确的 header - 编译器提示类型不完整:boost::fusion::extension::value_of_data_impl
  2. 我完全不清楚如何使用 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)。

最佳答案

@jv 是的,这正是答案。非常感谢。

我只使用了几个小时的 fusion ,并没有在文档中找到它(因为迭代器上的函数在顶层可见,而 value_at_key 仅在您深入研究 Sequence/intrinsic/元函数)

我还需要使用 typename 并选择更简单的包含。更正后的代码是:

#include <string>
#include <boost/fusion/include/sequence.hpp>
#include <boost/fusion/include/map.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(typename fusion::result_of::value_at_key<Fields, field>::type data) {
fusion::at_key<field>(A_map) = data;
}

关于c++ - 如何获取 boost::fusion::map 中值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40905328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com