Accepting function or delegate as function argument
Gary Willoughby via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 6 12:34:17 PDT 2016
On Wednesday, 4 May 2016 at 15:23:20 UTC, Rene Zwanenburg wrote:
> On Wednesday, 4 May 2016 at 14:54:39 UTC, chmike wrote:
>> Two constructors, one accepting a function and the other one
>> accepting a delegate would do the job for the API. Is there a
>> simple method to convert a function pointer into a delegate
>> pointer that is also efficient ?
>
> http://dlang.org/phobos/std_functional.html#.toDelegate
>
> You can also make your constructor a template, constrain it on
> isCallable if you wish, and then use toDelegate. If the
> argument is already a delegate toDelegate will avoid doing
> extra work.
import std.functional;
import std.stdio;
import std.traits;
class Foo(K,T)
{
private T delegate(K) m_factory;
public this(T)(T factory) if (isCallable!(T))
{
this.m_factory = toDelegate(factory);
}
public T bar(K key)
{
return this.m_factory(key);
}
}
string dummyFactory(string key)
{
return "Hello " ~ key;
}
void main()
{
auto foo = new Foo!(string, string)(&dummyFactory);
writeln(foo.bar("world"));
}
More information about the Digitalmars-d-learn
mailing list