Kotlin,铸造功能接收器

我有一对夫妇object ,如object Buffer ,提供确定的功能,我想打电话

 binding(bufferName[Buffer.VERTEX] to GL_ARRAY_BUFFER) { ... // calling Buffer functions } 

在里面我有可用的,例如,由于GL_ARRAY_BUFFER object Buffer的功能

binding目前是这样定义的

 inline fun <T, R> binding(pair: Pair<Int, Int>, block: T.() -> R) 

所以我的问题是,如果有可能“铸造”T基于pair.second特定对象,以便我可以调用对象提供的那些功能?

根据Int值对选择T,据我所知尽可能不是。 然而,密封类是一种很好的方法来实现这种“对每个值使用不同方法的枚举”类逻辑:

 sealed class BufferType(val type: Int) { class ArrayBuffer() : BufferType(GL_ARRAY_BUFFER) class AtomicCounterBuffer() : BufferType(GL_ATOMIC_COUNTER_BUFFER) /* other buffer types... */ } inline fun <Buffer: BufferType, R> binding(pair: Pair<Int,Buffer>, block : (Buffer) -> R) { glBindBuffer(pair.second.type, pair.first) block() /* ... */ } 

然后,可以在顶级BufferType类(用于全局可用的方法)或每个单独的缓冲区类型上公开所有可用的缓冲区方法。