Kotlin,铸造function接收器

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

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

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

binding目前是这样定义的

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

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

根据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  binding(pair: Pair, block : (Buffer) -> R) { glBindBuffer(pair.second.type, pair.first) block() /* ... */ } 

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