Итак, я объявил boost::bimap так:
boost::bimap<object*, position> object_list;
Где объект и позиция — это класс и структура соответственно.
В текущем объекте, хранящемся в бимапе, я хочу найти его собственную запись.
В настоящее время я пытаюсь сделать это следующим образом:
void order::do_thing() {
...
position pos = object_list.left.at(this);
...
}
У меня проблемы с анализом вывода ошибки, но похоже, что функция at бимапа не любит константность и/или ссылочность этого (и да, я знаю, что это rvalue).
Каким будет правильный/предлагаемый способ выполнения этого поиска?
Вот фрагмент ошибки:
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, и я предполагал, что просто сброс всего моего кода (только для включения пользовательских объектов и шаблонов для этого раздела кода сотни строк) считать дурным тоном, поэтому я урезал его до (как мне казалось) самого минимума, чтобы по-прежнему иметь дело с проблемой.
И просто для ссылки на тест-кейсы я пишу тест-кейсы. В этом случае я заменял вектор на бимап для добавления в код позиции, и это на самом деле не компилируется (хотя я скажу, что я не очень четко указал, что это ошибка компиляции, а не трассировка стека). Я предполагаю, что вы (sehe) думали, что я говорю об ошибке времени выполнения, потому что в противном случае я не понимаю, насколько релевантна ссылка.
В любом случае, я обрезал код до фактического минимума, чтобы воспроизвести ошибку, чтобы я мог опубликовать ее здесь, а затем понял реальную проблему. Как показано выше, бимап содержит значения <
object*, position>
Но класс, пытающийся вставить себя в бимап, является классом order: void
order ::do_thing() {
Так что это оказалось простой ошибкой типа. Извините, все, за действительно глупый вопрос. Наверное, это то, что я получаю за работу над проектами в 3 часа ночи.