View source code
Display the source code in std/functional.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

Function std.functional.toDelegate

Convert a callable to a delegate with the same parameter list and return type, avoiding heap allocations and use of auxiliary storage.

auto auto toDelegate(F) (
  auto ref F fp
)
if (isCallable!F);

Example

void doStuff() {
    writeln("Hello, world.");
}

void runDelegate(void delegate() myDelegate) {
    myDelegate();
}

auto delegateToPass = toDelegate(&doStuff);
runDelegate(delegateToPass);  // Calls doStuff, prints "Hello, world."

BUGS

  • Does not work with @safe functions.
  • Ignores C-style / D-style variadic arguments.

Example

static int inc(ref uint num) {
    num++;
    return 8675309;
}

uint myNum = 0;
auto incMyNumDel = toDelegate(&inc);
auto returnVal = incMyNumDel(myNum);
writeln(myNum); // 1

Authors

Andrei Alexandrescu

License

Boost License 1.0.