friends with phobos, workaround?
Daniel N via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Sep 10 01:22:27 PDT 2015
On Wednesday, 9 September 2015 at 23:44:14 UTC, Idan Arye wrote:
> How about using a mixin
> template(http://dlang.org/template-mixin.html)?
>
Thanks, it's a good solution. My only reservation is I would
prefer to find a way to directly invoke a symbol in std.* as
otherwise different frameworks might invent their own
conventions(well they might do that anyway). After a nights
sleep, I actually found such a solution!
This opens the door to a new class of meta-programming;
introspect the caller! :)
import std.typecons;
class Awesome1
{
private:
int val;
this(string caller = __MODULE__)(int val) if(caller ==
"std.conv") // Use scoped!Awesome
{
this.val = val;
}
}
class Awesome2
{
private:
int val;
this(string caller = __MODULE__)(int val)
{
static assert(caller == "std.conv", "Use
scoped!Awesome(...)!");
this.val = val;
}
}
void main()
{
static assert(__traits(compiles, scoped!Awesome1(1)));
static assert(__traits(compiles, scoped!Awesome2(1)));
static assert(!__traits(compiles, new Awesome1(1)));
static assert(!__traits(compiles, new Awesome2(1)));
}
More information about the Digitalmars-d-learn
mailing list