Template reference parameter
rumbu via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Mar 23 15:39:27 PDT 2015
On Monday, 23 March 2015 at 22:13:37 UTC, ketmar wrote:
> On Mon, 23 Mar 2015 22:01:03 +0000, rumbu wrote:
>
>> I'm trying to construct a struct template where one of the
>> template
>> parameters is passed by reference (as option)
>>
>> struct S(T, U)
>> {
>> void opCall(T t, U u) { }
>> }
>>
>> alias X = S!(T, U);
>> alias RX = S!(T, ref U); //not working
>>
>> The objective is to call X(t, u) or RX(t, u), but in second
>> case I want
>> "u" to be passed by reference.
>>
>> The only solution I found is to pass U as a pointer or as a
>> class.
>
> `ref` is not a part of a type, so you can't do it like this.
> you have to
> have two different templates for that. or try to use `auto
> ref`, it may
> help.
I have only one template and I think it's impossible to define
specializations since it's supposed that a random member of A...
will be passed sometime by reference:
struct MulticastDelegate(ReturnType, A...)
{
//...
ReturnType opCall(A args) { //... }
}
Here it's what I have right now:
alias SomeDelegateWithInt = MulticastDelegate!(bool, char, int);
alias SomeDelegateWithRefInt = MulticastDelegate!(bool, char,
int*);
SomeDelegateWithInt d1;
SomeDelegateWithRefInt d2;
...
int value;
bool b = d1('a', value);
bool b = d2('b', &value);
It's working, but I don't like the &value thing, ref would be
better.
More information about the Digitalmars-d-learn
mailing list