我有一個boost::bimap<int, boost::shared_ptr<A>>
容器,並希望返回一個迭代器到左視圖,以確保內容的穩定性。返回container.left.begin()
返回一個迭代器,該迭代器取消引用std::pair<int const, boost::shared_ptr<A> const>
。boost :: bimap shared_ptr&boost :: transform_iterator
很明顯,這不是我想要的,因爲可以通過取消引用shared_ptr
來更改A
。我想要一個迭代器,解除引用std::pair<int const, boost::shared_ptr<A const>>
(我真的不在乎shared_ptr是否爲const)。我知道我應該使用boost::transform_iterator來做到這一點,但我無法弄清楚「鑄造」功能應該是什麼樣子。
有人可以幫我解決這個問題嗎?還是有另一種更簡單的方法來獲得我想要的?
編輯:這是我到目前爲止,足以說,它給了我一個良好的2屏幕值得的錯誤。
typedef boost::bimap<unsigned int, boost::shared_ptr<A> > container_type;
typedef container_type::left_const_iterator base_const_iterator;
typedef boost::transform_iterator<makeIterConst<A>, base_const_iterator> const_iterator;
template <typename T>
struct makeIterConst : std::unary_function<std::pair<unsigned int const, boost::shared_ptr<T> const>, std::pair<unsigned int const, boost::shared_ptr<T const> const> >
{
std::pair<unsigned int const, boost::shared_ptr<T const> const> operator() (std::pair<int const, boost::shared_ptr<T> const> const & orig) const
{
std::pair<int const, boost::shared_ptr<T const> const> newPair(orig.first, boost::const_pointer_cast<T const>(orig.second));
return newPair;
}
};
這裏的「核心」的錯誤:
note: candidate function not viable: no known conversion from 'const boost::bimaps::relation::structured_pair, boost::bimaps::tags::tagged, boost::bimaps::relation::member_at::right>, mpl_::na, boost::bimaps::relation::normal_layout>' to 'const std::pair >' for 1st argument