Voldemort command structures

CTFE-4-the-win CTFE at 4the.win
Tue Apr 24 01:31:18 PDT 2012


On Sunday, 22 April 2012 at 18:42:19 UTC, Brad Anderson wrote:
> On Sun, Apr 22, 2012 at 4:24 AM, Gor Gyolchanyan <
> gor.f.gyolchanyan at gmail.com> wrote:
>
>> 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.
>>
>
> That's really neat.  We need to start making a catalog of 
> interesting stuff
> you can do in D.
>
> Regards,
> Brad Anderson

Be sure to add support for this also in the example:

if(auto e = s[6]) // implicit contains
   e.remove();



More information about the Digitalmars-d mailing list