On Sunday, 2 June 2013 at 05:27:08 UTC, Carl wrote:
I am writing a class to act like a database or cache. I want to
enable looping with foreach, but I need two separate opApply
methods. One for the internal looping through raw data and a
second for looping through the cached data (strings for
example).
Is there a way to scope the first opApply (looping through raw
data) to only be accessible inside the class? This would be
beneficial to prevent someone from accidentally looping through
raw data instead of their cached objects.
If the delegates to the opApply have different parameters (I.e.
it's actually a different data type getting passed to the foreach
loop), then method overloading will take care of it; just mark
one of them private.
If they both need to get sent the same kind of data, it's a hack,
but you could try encapsulating the data for the raw one inside a
private struct. Then, inside the foreach loop, you can "unpack"
the data from the struct before using it.
std.typecons.Typedef!(T) might also help--As I understand, it'll
make a type alias that's considered by the compiler to be a
separate data type.