gpt4 book ai didi

c++ - 在融合图中查找元素的索引

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:40 25 4
gpt4 key购买 nike

我正在努力寻找我正在寻找的一小部分功能。

我有一个包含 fusion::map 的类。我想使用可变构造函数来初始化该映射中的元素。

我希望最简单的方法是从构造函数参数构造一个fusion::vector,然后在 map 上调用for_each,并设置每对的 vector 中相应元素的值。

但是,为了做到这一点,我需要根据其 key 类型计算该对的索引。 (pair::first_type)

谁能帮帮我?

请看下面的示例代码:

#include <iostream>
#include <boost/fusion/container.hpp>
#include <boost/fusion/sequence.hpp>
#include <boost/fusion/mpl.hpp>
#include <boost/fusion/include/has_key.hpp>
#include <boost/fusion/include/algorithm.hpp>
#include <boost/mpl/transform.hpp>

namespace fusion = boost::fusion;
namespace mpl = boost::mpl;

// given a field, returns a fusion pair of <field, field::type>
template<class field>
struct make_pair
{
typedef typename fusion::result_of::make_pair<field, typename field::type>::type type;
};

// given a sequence of fields, returns a fusion map which maps field -> field::type
template<class... fields>
struct make_map
{
typedef typename boost::fusion::vector<fields...> vector;
typedef typename mpl::transform<vector, make_pair<mpl::_1>>::type pair_sequence;
typedef typename fusion::result_of::as_map<pair_sequence>::type type;
};

// initialise each member of a map with the corresponding element in the vector
template<typename vector>
struct init
{
init(vector& v) : _v(v) {}

template <typename pair>
void operator()(pair const& data) const
{
// TODO: use pair::first_type to find the index of this pair in the map, and set
// data.second to at_c<index>(_v);
}
vector& _v;
};

struct field1 { typedef int type; };
struct field2 { typedef int type; };

struct my_map
{
template<typename... args>
my_map(args... a)
{
typedef typename boost::fusion::vector<args...> vector;
vector arg_vec(a...);

fusion::for_each(_map, init<vector>(arg_vec));
}
typedef typename make_map<field1, field2>::type map;
map _map;
};

struct print
{
template <typename pair>
void operator()(pair const& data) const
{
std::cout << data.second << " ";
}
};


int main()
{
my_map m(1, 2);
fusion::for_each(m._map, print()); // should print '1 2'
return 0;
}

最佳答案

回答我自己的问题:

fusion::copy这就是我所需要的:

fusion::copy(arg_vec, _map);

关于c++ - 在融合图中查找元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11698413/

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