joining boost ranges in loop
Actually the question is how to achieve it? The use of boost::any_range is possible but undesirable (performance considerations) Sample code: typedef boost::multi_index_container< int, bmi::indexed_by<bmi::hashed_unique<bmi::tag<struct someTag>, bmi::identity<int>>>> Datum; class bar { public: auto foo() const; private: Datum m_someDataContainer; }; SomeType bar::foo() const { SomeType retVal; for (auto i = 0u; i < 10; ++i) { retVal = boost::range::join(retVal, m_someDataContainer.equal_range(i)); } return retVal; } Here we can observe several problems. The return type cannot be easily deduced. The join would create joined_range<joined_range<joined_range and so on of nested types. The above can be achieved by using any_range like typedef boost::any_range<int, boost::random_access_traversal_tag, int&, std::ptrdiff_t> VersionRange; but above will create nested joined_range of any_range which, when the number of iterations is big enough, has tremendous impact on performance. So, what can be done here?
participants (1)
-
Ernest Zaslavsky