beatsaber-hook
beatsaber-hook copied to clipboard
Adapt reference wrappers for `in`/`out`
So currently, we use ByRef<T>
which works fine for ref/out
but in the case that it is in
passed, we don't need it to be T
but rather const T
. While this isn't strictly necessary, it could be nice since it's obvious we can or cannot modify T
.
Hopefully, there can be an approach that also does not affect method resolution forcing you to choose between ConstRef
and MutRef
(coining these names today)
To add to this, out
should ALSO have its own wrapper type, one that disallows modification until it is emplaced with a value (specifically useful for cases when calling orig hooks before or after and to avoid any invalid behavior).
As far as allowing const T
in ByRef
goes, it MAY simply work as-is, but it might make more sense to make another wrapper type over that as well-- namely, these wrapper types should be ByRef<T>
for all intents and purposes, except have overridden behavior as far as assignment and replacement is concerned.