foreach Support by Range Member Functions
As you remember from the
foreach loop chapter, both how
foreach works and the types and numbers of loop variables that it supports depend on the kind of collection:
foreachprovides access to elements with or without a counter.
For associative arrays, to values with or without keys; for number ranges, to the individual values.
For library types,
foreachbehaves in a way that is specific to that type, e.g., for File, it provides the lines of a file.
It is also possible to define the behavior of
foreach for user-defined types. There are two methods of providing this support:
Defining range member functions, which allows using the user-defined type with other range algorithms as well
Defining one or more
Of the two methods,
opApply has priority: If it is defined, the compiler uses
opApply otherwise, it considers the range member functions. However, in most cases range member functions are sufficient, easier, and more useful.
foreach needs not be supported for every type. Iterating over an object makes sense only if that object defines the concept of a collection.