Voldemort command structures
Gor Gyolchanyan
gor.f.gyolchanyan at gmail.com
Sun Apr 22 03:24:39 PDT 2012
Voldemort types (coined by Andrei Alexandrescu) are types, which can't
be named. Like so:
auto getMisteriousData(int i)
{
struct Mysterious
{
int i;
}
return Mysterious(i);
}
The only way to use mysterious structure is to either do this:
auto m = getMysteriousData(12);
or
ReturnTypeOf!getMysteriousData m;
Here's a very handsome use case of this setup:
class Set(T)
{
public:
auto opIndex(T datum_)
{
struct Command
{
public:
alias _datum this;
bool contains() @property
{
return (_datum in _set) !is null;
}
void add()
{
_set._data[_datum] = false;
}
void remove()
{
_set._data.remove(_datum);
}
private:
Set _set;
T _datum;
}
}
private:
bool[T] _data;
}
this will allow you do use Set class like this:
auto s = new Set!int;
assert(!s[6].contains);
s[6].add();
assert(s[6].contains);
s[6].remove();
assert(!s[6].contains);
This will get even better if the voldemort Command structure, returned
by opIndex would include the same pattern, allowing to chain the
parameters and actions in any way desirable.
--
Bye,
Gor Gyolchanyan.
More information about the Digitalmars-d
mailing list