aliasing functions with function arguments as well ??
Steven Schveighoffer
schveiguy at gmail.com
Fri Aug 13 15:14:00 UTC 2021
On 8/13/21 11:04 AM, james.p.leblanc wrote:
> Dear All,
>
> How does one use 'alias' to incorporate function arguments as well?
>
> (I believe this is possible, from some of the examples of aliasSeq, and
> the traits.Parameters documentation. However, I was unable to come up
> with anything that works.)
>
> What should replace the question marks (???) below?
>
>> double bar( int a, double x){
>> return a*x:
>> }
>
>> template foo(T){
>> static if ( is(T==int) ){
>> alias ??? = ???
>> }
>> else{
>> alias ??? = ???
>> }
>> }
>>
>> // when T == int, I desire the aliasing to produce resulting code:
>> foo( int a) = bar( int a, 42.33);
>>
>> // when T == double, I desire:
>> foo( double x) = bar( 7, x);
>
>
> Thanks kindly for any information!
> James
>
> PS I am aware of the "struct holding a function allowing multiple
> dispatch concept"
> ... while that would fit quite okay here in my simple example, it isn't
> appropriate
> for my real use.
>
There isn't a way to alias it. You can wrap it though, and hope the
inliner takes care of the difference:
```d
auto foo(T)(T arg)
{
static if(is(T == int)) return bar(arg, 42.33);
else return bar(7, arg);
}
```
-Steve
More information about the Digitalmars-d-learn
mailing list