使用for_each中的变换促进融合
Boost fusion using transform in for_each
我正在尝试使用boost融合构建一个小的C++示例。但是,Visual Studio 2013 为以下代码段提供了生成错误。它应该简单地遍历关联结构并将所有成员名称打印到控制台:
#include <iostream>
#include <type_traits>
#include <boost/fusion/adapted/struct/define_assoc_struct.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/algorithm/transformation/zip.hpp>
#include <boost/fusion/algorithm/transformation/transform.hpp>
namespace keys
{
struct name
{};
struct id
{};
}
BOOST_FUSION_DEFINE_ASSOC_STRUCT((), Student,
(std::string, name, keys::name)
(int, id, keys::id)
);
struct getnames
{
template<typename Sig>
struct result;
template <typename S, typename T>
struct result<getnames(S, T)>
{
typedef std::string type;
};
template<class Struct, class N>
typename result<getnames(Struct, N)>::type operator() (const N& i) const
{
return boost::fusion::extension::struct_member_name<Struct, i>::call();
}
};
struct print
{
template<typename Sig>
struct result;
template <typename T>
struct result<print(T)>
{
typedef void type;
};
template<class S>
void operator() (const S& i) const
{
std::cout << i << std::endl;
};
};
int main()
{
Student j = {"John", 42};
auto names = boost::fusion::transform(j, getnames());
boost::fusion::for_each(names, print());
return 0;
}
这是我的错误:
boost/fusion/view/transform_view/detail/deref_impl.hpp(38): error C2039: 'type' : is not a member of 'boost::mpl::apply<boost::fusion::detail::apply_transform_result<getnames>,const std::basic_string<char,std::char_traits<char>,std::allocator<char>> &,boost::mpl::na,boost::mpl::na,boost::mpl::na,boost::mpl::na>'
还有四个错误,因为第一个错误而出现。
老实说,我不是使用助推聚变的专家,所以也许我只是在这里错过了一些重要的东西,其他人可以帮助我。
你的代码有几个问题。
1)在函子getnames
中,result
类型的签名和operator()
的签名不一致(一个取一个参数,另一个取两个)。
2) 在operator()(const N& i)
中,i
是一个运行时变量。它不能在表达式 boost::fusion::extension::struct_member_name<Struct, i>
中显示为模板参数。
我不知道如何在不知道您想用getnames
做什么的情况下提供帮助.首先尝试获得一致的代码。
- 基于范围的变换以实现正常循环
- OpenCV 傅里叶变换复杂输出问题
- SFML 纹理变换(放大)
- 使用融合乘法累加实现双精度有多大优势?
- 平面缓冲区可以利用向量中的 0 吗?还是其他小波比哈尔变换更好?
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 在特征中显示仿射变换
- 使用加速融合获取结构名称
- 离散傅立叶变换C++
- 如何检查助推融合序列是否为自适应结构
- ICP变换矩阵平移和旋转
- 如何从2D数组为QHeightMapSurfaceDataProxy创建高度图以显示2D傅立叶变换结果
- 将 3D 变换转换为 2D
- 使用变换翻转地图,接收错误"type int unexpected"
- 指示 Qi 变换属性失败的适当方法是什么?
- 如何在 c++ 中将变换与对的向量一起使用
- 骨骼动画:变换矩阵(collada)之间的插值
- 函数已知时的傅里叶变换
- 使用for_each中的变换促进融合
- 增强融合变换类型操作和as_vector