Since you must pass the string at each instanciation points, it is useless to make a template argument for it.
CVHDialogTmpl(const char *ptr_) : ptr(ptr_)
const char *ptr;
We can reuse VHRes class as defined in the original text and uses the class like this.
This will works with any string including those that are built at run-time. It will be less intensive of the compiler and the generated code will probably be more efficient (memory usage).