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.

Template std.functional.bind

Passes the fields of a struct as arguments to a function.

template bind(alias fun) ;

Can be used with a function literal to give temporary names to the fields of a struct or tuple.

Contained Functions

NameDescription
bind

Parameters

NameDescription
fun Callable that the struct's fields will be passed to.

Returns

A function that accepts a single struct as an argument and passes its fields to fun when called.

Example

Giving names to tuple elements

import std.typecons : tuple;

auto name = tuple("John", "Doe");
string full = name.bind!((first, last) => first ~ " " ~ last);
writeln(full); // "John Doe"

Example

Passing struct fields to a function

import std.algorithm.comparison : min, max;

struct Pair
{
    int a;
    int b;
}

auto p = Pair(123, 456);
assert(p.bind!min == 123); // min(p.a, p.b)
assert(p.bind!max == 456); // max(p.a, p.b)

Example

In a range pipeline

import std.algorithm.iteration : map, filter;
import std.algorithm.comparison : equal;
import std.typecons : tuple;

auto ages = [
    tuple("Alice", 35),
    tuple("Bob",   64),
    tuple("Carol", 21),
    tuple("David", 39),
    tuple("Eve",   50)
];

auto overForty = ages
    .filter!(bind!((name, age) => age > 40))
    .map!(bind!((name, age) => name));

assert(overForty.equal(["Bob", "Eve"]));

Authors

Andrei Alexandrescu

License

Boost License 1.0.