Joe
12/03/2018, 3:26 PMclass PhaseDefinition<C: GameContextBase, T: GamePhaseBase<C>>(val init: PhaseDefinition<C, T>.() -> Unit) {...}
robin
12/03/2018, 3:27 PMJoe
12/03/2018, 3:34 PMclass Start(gameContext: GameContext) : GamePhaseBase<GameContext>(gameContext)
That second type is already defined (this is C
in my class signature above). But I don't want to have to redefine it when constructing it later.
inline fun <C: GameContextBase, reified T: GamePhaseBase<C>> phase(noinline init: PhaseDefinition<C, T>.() -> Unit): PhaseDefinition<C, T> {
return PhaseDefinition(init)
}
I should add this is all in service of a DSL I'm trying to create. So instead of phase<Start> {...}
, now I would need to write phase<GameContext, Start> {...}
(with GameContext
needing to be added to every call). I mean, it's certainly doable, just feels very messy.Joe
12/03/2018, 3:35 PMStart()
already knows the generic class on it, it seems weird that I need add it.Joe
12/03/2018, 3:36 PMrobin
12/03/2018, 3:36 PMJoe
12/03/2018, 3:36 PMJoe
12/03/2018, 3:46 PMinline fun <reified T: GamePhaseBase<out GameContextBase>> phase(noinline init: PhaseDefinition<out GameContextBase, T>.() -> Unit): PhaseDefinition<out GameContextBase, T> {
return PhaseDefinition(init)
}
class PhaseDefinition<C: GameContextBase, T: GamePhaseBase<out C>>(val init: PhaseDefinition<C, T>.() -> Unit) {
}
Joe
12/03/2018, 3:47 PMJoe
12/03/2018, 3:47 PM