How to manage function's parameter storage class?
Sobaya
sobaya007 at gmail.com
Sat Jan 20 14:31:59 UTC 2018
I'm using opDispatch for wrapping a function like below.
```
import std.stdio;
void func(ref int x, int y) {
x++;
}
struct B {
// wraps 'func'. I want to implement this function.
template opDispatch(string fn) {
void opDispatch(Args...)(Args args) {
mixin(fn~"(args);"); // func(args);
}
}
}
void main() {
{
// This is good behavior.
int x = 3;
func(x, 1);
writeln(x); // prints '4'
}
{
// This is bad behavior.
B b;
int x = 3;
b.func(x, 1);
writeln(x); // prints '3' because x is copied when
passed to opDispatch.
}
}
```
How can I wrap function whose arguments contain both ref and
normal like 'func' ?
With normal 'Args', x is not increased because x is copied when
passed to opDispatch.
If I write 'ref Args' in opDispatch's argument, it fails because
second parameter is not rvalue.
More information about the Digitalmars-d-learn
mailing list