Opened 12 years ago

Closed 12 years ago

#4621 closed Patches (fixed)

Feature Request: add some version of "type erasure" range/iterator

Reported by: Ilya Murav'jov <muravev@…> Owned by: Neil Groves
Milestone: To Be Determined Component: range
Version: Boost 1.44.0 Severity: Not Applicable
Keywords: Cc: muravev@…

Description

Hi!

I successfully use B.Lambda/B.Function for closure functionality in my code and would like to do the same with complex iterators/ranges . I've successfully implemented such "any" iterator range on top of any_iterator ( thanks to http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/start_page.html ), see any_range.h . The common use case is as follows (my real code, select.cpp):

  fe::range<Comp::MediaObj*> SelectedMediaObjs(MenuRegion& mn_rgn, const int_array& sel_arr)
  {
      return fe::make_any( sel_arr | fe::transformed(ToMOTransform(mn_rgn)) );
  }
  fe::range<Comp::MediaObj*> SelectedMediaObjs(MEditorArea& edt_area)
  {
      return SelectedMediaObjs(edt_area.CurMenuRegion(), edt_area.SelArr());
  }

  ...
  // somewhere else
  ...
  BOOST_FOREACH( Comp::MediaObj* obj, SelectedMediaObjs(edt_area) )
  {
      res_mi = obj->MediaItem();
      break;
  }

Attachments (1)

any_range.h (1.6 KB ) - added by Ilya Murav'jov <muravev@…> 12 years ago.

Download all attachments as: .zip

Change History (2)

by Ilya Murav'jov <muravev@…>, 12 years ago

Attachment: any_range.h added

comment:1 by Neil Groves, 12 years ago

Resolution: fixed
Status: newclosed

Implementation added to the trunk.

Note: See TracTickets for help on using tickets.