I mean, in general you can just call the generic explicitly with
`update[Enemy](self)` like so:
type
Enemy = ref object
EntGroup[T] = ref object
items: seq[T]
proc update[T](self: EntGroup[T]) =
echo "general update loop"
proc update(self: EntGroup[Enemy]) =
## << What to put here to call the `update[T]()` code? ##
update[Enemy](self)
echo "enemy code"
var eg = EntGroup[Enemy]()
eg.update()
Run
Outputs as you expect. Generally though what you're currently implementing
looks to me more like you're thinking in patterns of dynamic dispatch with
method (Namely that there's a "base-entity" that you can perform a "base-task"
on that should always be run).
If that's how you think about your code then imo it's best you also implement
it in that fashion using methods etc. as blackmius suggested.