digitalmars.D.learn - How to manage function's parameter storage class?
- Sobaya (37/37) Jan 20 2018 I'm using opDispatch for wrapping a function like below.
- Simen =?UTF-8?B?S2rDpnLDpXM=?= (5/11) Jan 20 2018 https://dlang.org/spec/function.html#auto-ref-functions
- Sobaya (3/14) Jan 20 2018 Oh... I missed it...
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.
Jan 20 2018
On Saturday, 20 January 2018 at 14:31:59 UTC, Sobaya wrote: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.https://dlang.org/spec/function.html#auto-ref-functions Simply put, instead of 'ref' use 'auto ref'. -- Simen
Jan 20 2018
On Saturday, 20 January 2018 at 17:05:40 UTC, Simen Kjærås wrote:On Saturday, 20 January 2018 at 14:31:59 UTC, Sobaya wrote:Oh... I missed it... Thanks! !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.https://dlang.org/spec/function.html#auto-ref-functions Simply put, instead of 'ref' use 'auto ref'. -- Simen
Jan 20 2018








Sobaya <sobaya007 gmail.com>