On Wed, May 04, 2016 at 06:21:36AM +0000, chmike via Digitalmars-d-learn wrote:
> Hello,
> 
> I failed to find some code example for a template class/struct that
> accept a function/delegate as template argument. All examples I could
> find use simple value types like int or double.

The usual way is to use an alias argument:

        class MyClass(alias fun)
                if (is(typeof(fun(0)))) // assuming fun takes 1 int argument
        {
                void method() {
                        fun(0);
                }
        }


> I piggy bag another question. Defining a function/delegate as function
> argument is shown in examples. What I could not find is how would I
> pass an object instance with a method to call ? In C++ we use
> std::bind. How do we do that in D ?

You probably need a delegate, since a function (== function pointer) in
D is a pointer to a (module-global) function with no context. If you
need a context, e.g., an object instance, you need a delegate. Example:

        class C {
                void method(int x) {
                        import std.stdio;
                        writeln("bing!");
                }
        }
        void fun(void delegate(int) dg) {
                dg(1);
        }
        void main() {
                auto c = new C;
                fun(&c.method);
        }


T

-- 
Long, long ago, the ancient Chinese invented a device that lets them see 
through walls. It was called the "window".

Reply via email to