что через шаблон это сделать более проблематично. А через функцию - элементарно: для каждого описываемого класса пишем функцию ClassXXX *CreateInstanceClassXXX(void *ptr); указатель на которую передаем туда, где нужно создать новый класс.