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.