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.

Reply via email to