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