how to get enclosing function as symbol ? (eg: __function__.stringof ==__FUNCTION__)
Nicolas Sicard
dransic at gmail.com
Sun Aug 18 00:27:05 PDT 2013
On Sunday, 18 August 2013 at 02:50:32 UTC, JS wrote:
> On Sunday, 18 August 2013 at 01:52:50 UTC, Timothee Cour wrote:
>> Is there any way to get the enclosing function as symbol ?
>>
>> I'd like something like that:
>> alternative names would be:
>> __function__
>> __context__
>>
>> ----
>> auto fun(alias caller=__function__)(){
>> //caller represents fun1!double
>> return ReturnType!caller.init;
>> }
>>
>> T fun1(T)(T x){
>> assert(__function__.stringof==__FUNCTION__);
>> alias fun=__function__;
>> assert( is(ReturnType! __function__) == T);
>> return fun();
>> }
>> void main(){fun1!double();}
>> ----
>
> use a string mixin?
I thought this would work but it doesn't:
---
void foo(T)()
{
bar!__FUNCTION__();
}
void bar(string Caller)()
{
mixin("alias caller = " ~ Caller ~ ";");
}
void main()
{
foo!double();
}
---
It works if foo isn't a template, though. The problem when foo is
a template is that foo!double.foo seems to be an illegal
construct for the compiler...
More information about the Digitalmars-d-learn
mailing list