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".