>I'm not sure if I would overload functions or just accept a non-typed param >and then check it's type as a wrapper.
Which is why people have overloading, so you don't have to do stuff like that... accepting an * means people have no idea what is legal to pass you and have to wait for a runtime error to find out... That is kind of the opposite of a descriptive API