Listing 6
template<typename IterableConcept>
struct IterableExtension : IterableConcept {
typedef typename IterableConcept::Iterator Iterator;
typedef typename IterableConcept::Item Item;
template<typename FunctionT>
void ForEach(FunctionT f) {
Iterator first = IterableConcept::Begin(), last =
IterableConcept::End();
while (first != last) f(*first++);
}
bool IsEmpty() {
return IterableConcept::Begin() == IterableConcept::End();
}
int Count() {
int ret = 0;
Iterator first = IterableConcept::Begin(), last =
IterableConcept::End();
while (first != last) ++first, ++ret;
return ret;
}
};