Efficient way to pass struct as parameter
Seb
seb at wilzba.ch
Tue Jan 2 19:05:46 UTC 2018
On Tuesday, 2 January 2018 at 18:21:13 UTC, Tim Hsu wrote:
> I am creating Vector3 structure. I use struct to avoid GC.
> However, struct will be copied when passed as parameter to
> function
>
>
> struct Ray {
> Vector3f origin;
> Vector3f dir;
>
> @nogc @system
> this(Vector3f *origin, Vector3f *dir) {
> this.origin = *origin;
> this.dir = *dir;
> }
> }
>
> How can I pass struct more efficiently?
If you want the compiler to ensure that a struct doesn't get
copied, you can disable its postblit:
@disable this(this);
Now, there are a couple of goodies in std.typecons like
RefCounted or Unique that allow you to pass struct around without
needing to worry about memory allocation:
https://dlang.org/phobos/std_typecons.html#RefCounted
https://dlang.org/phobos/std_typecons.html#Unique
Example: https://run.dlang.io/is/3rbqpn
Of course, you can always roll your own allocator:
https://run.dlang.io/is/uNmn0d
More information about the Digitalmars-d-learn
mailing list