Manually allocate delegate?
Jack Applegame via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Nov 21 00:31:35 PST 2015
On Sunday, 12 July 2015 at 08:38:01 UTC, Tofu Ninja wrote:
> Is it even possible?
You can use function instead delegate, and bind captured
variables as struct:
http://dpaste.dzfl.pl/6e23bbcfe17f
auto bind(F: R function(ARGS), R, ARGS...)(F fn, ARGS args) @nogc
{
struct Functor {
F fn;
ARGS args;
this(F fn_, ARGS args_) {
fn = fn_;
args = args_;
}
R opCall() { return fn(args); }
}
return Functor(fn, args);
}
import std.stdio;
auto foo(int x) {
static int bar(ref int x){ return x++; }
return bind(&bar, x);
}
void main() {
auto f1 = foo(5);
auto f2 = foo(10);
writefln("%s, %s, %s", f1(), f1(), f1());
writefln("%s, %s, %s", f2(), f2(), f2());
}
More information about the Digitalmars-d-learn
mailing list