As the original issue was also concerning readability and I wanted to minimize potentially confusing parameters on the interface, I've iterated on Ben Voigt's answer and ended up with this:
template<typename T>
void RegisterResolver(int id, T** ppObject)
{
// assert(ppObject != 0);
Base* pBase(*ppObject); // not used
// implementation
}