C++ 融合:nview和const令人头痛

C++ 融合:nview和const令人头痛,c++,boost,vector,constants,boost-fusion,C++,Boost,Vector,Constants,Boost Fusion,我已经在代码里呆了一段时间了。我可以解决这个问题,但是如果我甚至不能编译代码,我会感觉很糟糕。代码中描述了这些问题 namespace fusion = boost::fusion; template <int N, typename T> struct viewTraits { typedef typename T::value_type value_type; typedef typename fusion::result_of::as_nvi

我已经在代码里呆了一段时间了。我可以解决这个问题,但是如果我甚至不能编译代码,我会感觉很糟糕。代码中描述了这些问题

namespace fusion = boost::fusion;


  template <int N, typename T>
  struct viewTraits
  {

    typedef typename T::value_type value_type;

    typedef typename fusion::result_of::as_nview<value_type, N>::type view_type;

    typedef std::vector<view_type> result_type;
  };


  int main ()
  {

    typedef boost::fusion::vector<int, double> VecType;

    typedef std::vector<VecType> Matrix;

    typedef viewTraits<0, Matrix>::result_type R;

    Matrix m (20);
    for (int i = 0; i < 20; ++i)
    {
      m[i] = VecType (i, i+0.1*i);
    }
    R r;

    /*
    * the following can compile, but not what I want
    */
    BOOST_FOREACH (Matrix::value_type v, m)
    {
      r.push_back (fusion::as_nview <0>(v) );
    }

    /*
    * the following cannot compile???, why???
    */
    BOOST_FOREACH (Matrix::value_type const &v, m)
    {
      r.push_back (fusion::as_nview <0>(v) );
    }
  }
namespace fusion=boost::fusion;
模板
结构视图特征
{
typedef typename T::value_type value_type;
typedef typename fusion::result_of::as_nview::type view_type;
typedef std::向量结果类型;
};
int main()
{
typedef boost::fusion::vector VecType;
向量矩阵;
typedef viewtracts::result_type R;
矩阵m(20);
对于(int i=0;i<20;++i)
{
m[i]=VecType(i,i+0.1*i);
}
R;
/*
*下面的代码可以编译,但不是我想要的
*/
BOOST_FOREACH(矩阵::值_类型v,m)
{
r、 向后推(融合::如视图(v));
}
/*
*以下内容无法编译,为什么???
*/
BOOST\u FOREACH(矩阵::值\u类型const&v,m)
{
r、 向后推(融合::如视图(v));
}
}

任何人都可以指出我遗漏了什么。

BOOST\u FOREACH希望循环变量作为第一个参数,因此它不能是常量(而且它对逗号很挑剔,因为它是一个宏)。看看。

编译器错误消息是什么?没有匹配的函数用于调用–std::vector::push_back(boost::fusion::nview)stl_vector.h:602:注意:候选函数是:void std::vector::push_back(const _Tp&)[with _Tp=nview