That is what you have implemented. Maybe you can remove the Nmsp to make live easier or write
using namespace Nmsp;
Your Operate function needs a Derived object reference as input, so an overriden
void Operate(T *bPtr)
{
basePtr = std::make_unique<T>(std::move(bPtr));
}
should work.