わかりましたので、boost::bimap を次のように宣言しました。
boost::bimap<object*, position> object_list;
object と position は、それぞれクラスと構造体です。
Bimap に格納されている現在のオブジェクト内で、独自のエントリを見つけたいと考えています。
私は現在、次のようにしようとしています:
void order::do_thing() {
...
position pos = object_list.left.at(this);
...
}
エラー出力の解析に問題がありますが、bimap の at 関数は、これの const 性および/または参照性が気に入らないようです (はい、これが右辺値であることはわかっています)。
この検索を行うための適切な/推奨される方法は何ですか?
エラーのスニペットを次に示します。
order.cpp:117:56: required from here
/usr/include/boost/bimap/container_adaptor/associative_container_adaptor.hpp:207:56: error: no match for call to ‘(const boost::bimaps::container_adaptor::detail::key_to_base_identity<object*, object* const>) (order* const&)’
this->template functor<key_to_base>()(k)
(seheのコメントに対処し、問題を指摘するために編集が追加されました)
私の投稿が悪いエチケットであった場合はお詫びします。私はSOに投稿するのが初めてで、すべてのコードをダンプするだけであると仮定していました(コードのこのセクションのカスタムオブジェクトとテンプレートを含めるだけで数百行になります)悪い形と見なされるので、問題を解決するために(私が思っていた)最小限に切り詰めました.
そして、テストケースのリンクに対処するために、私はテストケースを書きます. この場合、bimap のベクトルを位置コードに追加するために交換していましたが、これは実際にはコンパイルに失敗しました (スタック トレースではなく、コンパイル エラーであることを明確に述べていませんでしたが)。私はあなた (sehe) を想定していますが、ランタイム エラーについて話していると思っていました。
とにかく、エラーを再現するためにコードを実際の最小値までトリミングしていたので、ここに投稿して実際の問題に気付きました。上記のように、bimap は値<
object*, position>
を保持しますが、bimap に自分自身を挿入しようとしているクラスは順序クラスです: void
order::do_thing() {
したがって、単純なタイプのエラーであることが判明しました。みなさん、本当にくだらない質問をしてすみません。午前 3 時にプロジェクトに取り組むことで得られるものだと思います。