使用反射来传递和修改一个基本而不使用数组
在一个imgui 端口上工作,我总是使用原始数组来模拟c ++指针/地址传递。
例如:
checkbox("Anti-aliased lines", bool.apply { set(0, style.antiAliasedLines) }) style.antiAliasedLines = bool[0]
其中bool: BooleanArray
我只是探讨了直接传递字段的可能性,而不是c ++:
ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines);
科特林:
checkbox("Anti-aliased lines", style::antiAliasedLines })
我只需要在checkbox()
上容纳一个对应的KMutableProperty0<Boolean>
,并且我也进行了double检查,以便可以在同一个函数中设置该字段: get(): Boolean
和set(Boolean)
我的顾虑是:
-
这与Java的发挥不错?
-
如果我沿着这条路走下去的话,有没有什么禁忌我应该知道的? 比如演出什么的?
因为我有这样的感觉,因为这种方法是不知羞耻和肮脏的
这对java有好处吗?
有一件事情是不可行的,那就是引用Kotlin用来表示Java getter和setter的综合属性,例如getFoo
+ setFoo
→ foo
(并且不能使用绑定的可调用的引用bar::foo
)。 目前尚不支持。
您可以尝试通过自定义的KMutableProperty0
实现来解决这个问题,该实现接受对Bar::getFoo
, Bar::setFoo
和bar
未绑定可调用引用,并在获取和设置其值的意义上充当属性引用。
如果我沿着这条路线走下去,有什么禁忌我应该知道的? 比如演出什么的?
一个绑定的可调用引用保存了对接收者的引用,所以style::antiAliasedLines
将保留来自GC的style
,并且必须小心存储哪些可调用的引用。