DIP80: phobos additions
Tofu Ninja via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 25 01:48:00 PDT 2015
On Thursday, 25 June 2015 at 01:32:22 UTC, Timon Gehr wrote:
> [...]
Heres what I came up with... I love D so much <3
module util.binOpProxy;
import std.algorithm : joiner, map;
import std.array : array;
struct __typeproxy(T, string s)
{
enum op = s;
T payload;
auto opUnary(string newop)()
{
return __typeproxy!(T,newop~op)(payload);
}
}
/**
* Example:
* struct test
* {
* mixin(binOpProxy!("~", "*"));
*
* void opBinary(string op : "+~~", T)(T rhs)
* {
* writeln("hello!");
* }
*
* void opBinary(string op : "+~+-~*--+++----*", T)(T rhs)
* {
* writeln("world");
* }
*
* void opBinary(string op, T)(T rhs)
* {
* writeln("default");
* }
* }
*
*/
enum binOpProxy(proxies ...) = `
import ` ~ __MODULE__ ~ ` : __typeproxy;
auto opBinary(string op, D : __typeproxy!(T, T_op), T, string
T_op) (D rhs)
{
return opBinary!(op~D.op)(rhs.payload);
}
` ~ [proxies].map!((string a) => `
auto opUnary(string op : "` ~ a ~ `")()
{
return __typeproxy!(typeof(this),op)(this);
}
`).joiner.array;
More information about the Digitalmars-d
mailing list