On Wed, 10 Dec 2008 02:40:47 +0300, tsalm <[EMAIL PROTECTED]> wrote:

Hello,

How to implement an object that can do this :
myClass.add(something)(otherthings)(thisToo);

Is it possible ?

TIA,
TSalm

Yes:

import std.stdio;

class MyClass
{
   class MyClassAdder
   {
       MyClassAdder opCall(Foo foo)
       {
           _add(foo);
           return this;
       }
   }
        
   class MyClassRemover
   {
       MyClassRemover opCall(Foo foo)
       {
           _remove(foo);
           return this;
       }
   }
        
   this()
   {
       _adder = new MyClassAdder();
       _remover = new MyClassRemover();
   }

   MyClassAdder add(Foo foo)
   {
       _add(foo);
       return _adder;
   }
        
   MyClassRemover remove(Foo foo)
   {
       _remove(foo);
       return _remover;
   }

   private void _add(Foo foo) { writefln("added"); }
   private void _remove(Foo foo) { writefln("removed"); }
   private MyClassAdder _adder;
   private MyClassRemover _remover;
}

class Foo
{
}

void main()
{
   MyClass myClass = new MyClass();
   myClass.add(null)(null)(null);
   myClass.remove(null)(null)(null);
}

Reply via email to