5

不确定我是否在某处有一个简单的错字,但我在对元组双端队列进行排序时遇到了问题。

所以,我的双端队列看起来像这样:

std::deque<boost::tuple<unsigned int, unsigned int> > messages;

然后我要排序:

sort(messages.begin(), messages.end(), msg_sort_criteria);

还有我的排序功能:

bool msg_sort_criteria(boost::tuple<unsigned int, unsigned int> lhs, boost::tuple<unsigned int, unsigned int> rhs)
{
  return boost::get<1>(lhs) < boost::get<1>(rhs);
}

发生的情况是我在 stl_heap.h 和 stl_algo.h 中出现错误。例如,

调用的对象类型“ <bound member function type>”不是函数或函数参数。


编辑:

为了澄清起见,这一切都发生在类的私有成员中。

class Messages::MessageImpl{
private:
  std::deque<boost::tuple<unsigned int, unsigned int> > messages;

  bool msg_sort_criteria(boost::tuple<unsigned int, unsigned int> lhs, boost::tuple<unsigned int, unsigned int> rhs)
  {
    return boost::get<1>(lhs) < boost::get<1>(rhs);
  }

  void fn()
  {
    sort(msg_queue_.begin(), msg_queue_.end(), msg_sort_criteria);
  }
}
4

1 回答 1

1

主要是从评论转发。

将您的实现更改为:

class Messages::MessageImpl{
private:
  std::deque<boost::tuple<unsigned int, unsigned int> > messages;

  static bool msg_sort_criteria(boost::tuple<unsigned int, unsigned int> lhs,
                                boost::tuple<unsigned int, unsigned int> rhs)
  {
    return boost::get<1>(lhs) < boost::get<1>(rhs);
  }

  void fn()
  {
    sort(msg_queue_.begin(), msg_queue_.end(), &MessageImpl::msg_sort_criteria);
  }
};
于 2012-07-17T18:09:56.177 回答