Некоторый контекст!
template <class, class Base>
class PrototypeFactoryUnit: public Base {
public:
typedef typename Base::ProductList::Head AbstractProduct;
friend void DoGetPrototype(const PrototypeFactoryUnit& me,
AbstractProduct*& pPrototype)
{
pPrototype = me.pPrototype_;
}
template <class U>
void GetPrototype(U*& p) {
return DoGetPrototype(*this, p);
}
private:
AbstractProduct* pPrototype_;
};
(хотя это и дало мне возможность убрать пыль на этом ...)
Поскольку GetPrototype
- это шаблон, он можетбыть воплощенным во многих различных типах.Затем в игру вступит разрешение перегрузки!
Например, я пишу DoGetPrototype(...& me, DerivedProduct*& p)
и затем говорю:
DerivedProduct* p =0;
factory.GetPrototype(p);
Затем вызывается перегрузка my .
Следовательно, это точка настройки: статическая отправка, аналогичная аналогу времени выполнения функции virtual
с реализацией по умолчанию.