
on Sun Aug 31 2008, Arno Schödl <aschoedl-AT-think-cell.com> wrote:
// Gimme a better name, please! The abstraction is a thing that // is always used in pairs, where each instance contains some // redundant information in common. auto concept Factorable<typename T> { typename common_data = void; typename unique_data = T;
common_data common(T) {} unique_data unique(T x) { return x; } T reconstruct(common_data, unique_data x) { return x; } };
How is the separation of common_data and unique_data different from a separation of ranges and iterators? If iterators of ranges can rely on their range to exist, this is where common data like functors, end iterators etc. can be stored.
Naturally the point is to store the common data once when you need to store more than one iterator to the same sequence -- in a range, for example. If you're asking why I bother reconstituting the whole iterator out of its parts, instead of simply referring to the common_data stored in the range: an adapted iterator is a useful concept regardless of whether anyone is using a range abstraction. -- Dave Abrahams BoostPro Computing http://www.boostpro.com