Feels like a kludge :(
It isn't. It's called a "Simple Factory" pattern, and it solves a lot of creation issue, even in languages that have constructors that take parameters.BlitzMAX uses them extensively. CreateList, CreateImage, CreatePixmap, CreateWindows, CreateGraphics, etc...