gpt4 book ai didi

c++错误访问boost fusion 对中的字段类型

转载 作者:太空狗 更新时间:2023-10-29 23:04:35 24 4
gpt4 key购买 nike

我正在尝试从 fusion 图中创建一个 filter_view,但似乎无法使模板元函数起作用。

所以我有一个结构与此类似的 fusion 图

#include <boost/fusion/container/map.hpp>
#include <boost/fusion/view/filter_view.hpp>

template <typename> struct SetField { };
using IDType = int;
using NameType = std::string;
using TimeField = double;

using namespace boost::fusion;
typedef map<pair<struct ActId, SetField<IDType> >,
pair<struct ActName, SetField<NameType> >,
pair<struct ActStart, TimeField>,
pair<struct ActEnd, TimeField> > ActivityMapType;

我想创建一个 filter_view 来排除第二种类型是 TimeField 的字段

int main()
{
ActivityMapType map_;
filter_view<
ActivityMapType const,
boost::mpl::not_<boost::is_same<result_of::second<boost::mpl::_>::type, TimeField>>
> view(map_);
}

我得到的编译器错误是

 /home/mike/boost/boost/fusion/support/pair.hpp: In instantiation of
'struct boost::fusion::result_of::second<mpl_::arg<-1> >':
/home/mike/project/Filter/FusionActivityFilter.h:328:55: required
from here /home/mike/boost/boost/fusion/support/pair.hpp:68:48: error:
no type named 'second_type' in 'struct mpl_::arg<-1>'
typedef typename Pair::second_type type;

我想知道我是否只是错误地使用了 boost::mpl::_ 占位符,我是这个元编程的新手。

最佳答案

好吧,我找到了一个解决方案,基本上就是给定的答案 here

template <typename FPair>
struct get_second
{
typedef typename FPair::second_type type;
};

int main()
{
ActivityMapType map_;
typedef boost::fusion::result_of::filter_if<
boost::mpl::lambda<
boost::mpl::not_<
boost::is_same<
TimeField,
get_second<boost::mpl::_1>
>
>
>::type
>::type no_time_type;
no_time_type noTimes(map_);
}

我不太明白为什么我不能用 boost::fusion::filter_view 做同样的事情。我以为我找到了一张 boost ticket open for which seems like a potential reason,但我现在找不到了。似乎 filter_view 阻止了占位符 _1 的实际类型被内部元函数看到。

关于c++错误访问boost fusion 对中的字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408878/

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