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