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"));
}