【问题标题】:BOOST_FOREACH with ptr_vector of noncopyable object带有不可复制对象的 ptr_vector 的 BOOST_FOREACH
【发布时间】:2013-01-25 17:39:18
【问题描述】:

我有以下几点:

class X : public boost::noncopyable
{...};

class Y 
{
   public:
      const boost::ptr_vector<X>& getXs() const;
   private:
      boost::ptr_vector<X> m_xs;
}

int main()
{
   Y y1;
   //...

   const boost::ptr_vector<X>& mx = y1.getXx();

   BOOST_FOREACH(boost::ptr_vector<X>::value_type x, mx)
   {
       // do something with x!
   }
}

它编译但它不链接!它表示 BOOST_FOREACH 需要 implicit default copy constructor for X

我怎样才能只遍历指向 X 的指针...没有复制构造函数,使用 BOOST_FOREACH

谢谢。

【问题讨论】:

    标签: boost-foreach


    【解决方案1】:

    尝试使用 BOOST_FOREACH() 中的引用,.i.e.

    BOOST_FOREACH(boost::ptr_vector<X>::value_type &x, mx)
    {
        // do something with x!
    }
    

    【讨论】:

    • 谢谢,但还是不行。问题似乎是BOOST_FOREACH(boost::ptr_vector&lt;X&gt;::value_type &amp;x, mx) 需要复制构造函数。我不知道。
    • 嗯,我写的东西没有真正的意义,对此感到抱歉。尝试const boost::ptr_vector&lt;X&gt; &amp;mx = ... 然后BOOST_FOREACH(const boost::ptr_vector&lt;X&gt;::iterator::value_type &amp;x, mx) 或者尝试没有const 的那些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多