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

Reply via email to