myClass.add(something)(otherthings)(thisToo);

Denis Koroskin 2korden at gmail.com
Tue Dec 9 15:53:40 PST 2008


On Wed, 10 Dec 2008 02:40:47 +0300, tsalm <tsalm at free.fr> 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);
}


More information about the Digitalmars-d-learn mailing list