Kotlin, receptor de funciones de casting

Tengo un par de object , como el object Buffer , que ofrece funciones determinadas y me gustaría llamar

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

donde dentro tengo disponible, por ejemplo, las funciones del object Buffer debido al GL_ARRAY_BUFFER

binding es en este momento tan definido

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

Entonces mi pregunta es si es posible "lanzar" T a un object específico basado en pair.second para que pueda llamar a esas funciones que ofrece el object.

De acuerdo con mi mejor conocimiento, no es posible elegir T dependiendo del pair.second valores Int. pair.second . Sin embargo, las classs selladas son una buena forma de implementar este tipo de lógica de "enum con diferentes methods para cada valor":

 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() /* ... */ } 

A continuación, puede exponer todos los methods de búfer disponibles en la class BufferType nivel superior (para methods disponibles a nivel mundial) o en cada tipo de búfer individual.

  • Devoluciones de llamada de Android y reutilización de código
  • Jackson no deserializa las classs de datos de Kotlin
  • Kotlin: ¿Qué puedo hacer cuando una biblioteca Java tiene una sobrecarga de tipo primitivo y encuadrado?
  • firebase putfile en kotlin
  • Usa el reino en todos los hilos
  • No se pudo encontrar la class databinding.FragmentBinding
  • Kotlin || El elemento Recycleview no está inflando: código inalcanzable en cada método reemplazado de RecycleView.Adapter
  • ¿Cómo es útil la delegación de kotlin?
  • ¿Cuál es la forma correcta de usar las extensiones de Anko Coroutines?
  • Reasignar variables a través de la desestructuración
  • Escape $ {something} en una cadena de Kotlin