beatsaber-hook icon indicating copy to clipboard operation
beatsaber-hook copied to clipboard

Adapt reference wrappers for `in`/`out`

Open Fernthedev opened this issue 3 years ago • 1 comments

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)

Fernthedev avatar Dec 23 '21 00:12 Fernthedev

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.

sc2ad avatar Dec 23 '21 00:12 sc2ad