What you are trying to do with generics is impossible if the type you need is not T.
The value that goes where you are asking for needs to be a generic value or a value known at compile time.
That means your only choice is:
create<T>(root);
Or:
create<PureTypeName>(root);
Or adding other generic parameters.
solved How to convert string into type? [closed]