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 に答える