if static member then call

2016-08-13 Thread Engine Machine via Digitalmars-d-learn

auto ref foo(T, Args...)(args)
{
static if (hasStaticMember!(T, "foo"))
return T.foo!(T)(args);
}

Basically I want to forward the *static* call to T if possible(if 
foo exists in T). The main problem is actually calling T.foo as 
the syntax here doesn't work. I also need to be able to check to 
see if a method is static, since I have no object.





Re: if static member then call

2016-08-13 Thread Cauterite via Digitalmars-d-learn

On Saturday, 13 August 2016 at 18:34:43 UTC, Engine Machine wrote:

auto ref foo(T, Args...)(args)
{
static if (hasStaticMember!(T, "foo"))
return T.foo!(T)(args);
}

Basically I want to forward the *static* call to T if 
possible(if foo exists in T). The main problem is actually 
calling T.foo as the syntax here doesn't work. I also need to 
be able to check to see if a method is static, since I have no 
object.


you're probably gonna want something like, if i understand your 
question correctly:

return __traits(getMember, T, "foo")(args);


Re: if static member then call

2016-08-13 Thread Cauterite via Digitalmars-d-learn

On Saturday, 13 August 2016 at 18:34:43 UTC, Engine Machine wrote:

static if (hasStaticMember!(T, "foo"))


Here I suspect you're looking for this:
__traits(isStaticFunction, __traits(getMember, T, "foo"))


Re: if static member then call

2016-08-13 Thread Engine Machine via Digitalmars-d-learn

On Saturday, 13 August 2016 at 18:42:50 UTC, Cauterite wrote:
On Saturday, 13 August 2016 at 18:34:43 UTC, Engine Machine 
wrote:

static if (hasStaticMember!(T, "foo"))


Here I suspect you're looking for this:
__traits(isStaticFunction, __traits(getMember, T, "foo"))


Thanks.

It needs to be something like

static if (hasMemeber!(T, "foo") && __traits(isStaticFunction, 
__traits(getMember, T, "foo")))