Я изо всех сил пытаюсь понять, почему инициализация pprocessor, ниже, написана так:
class X
{
...
private:
boost::scoped_ptr<f_process> pprocessor_;
};
X:X()
: pprocessor_( f_process_factory<t_process>().make() ) //why the factory with template
{...}
вместо того, чтобы просто писать
X:X()
: pprocessor_( new t_process() )
{...}
Другой соответствующий код:
class f_process {
...
};
class t_process : public f_process {
...
};
//
class f_process_factory_base {
public:
f_process_factory_base() { }
virtual ~f_process_factory_base() = 0 { }
virtual f_process* make() = 0;
};
template < typename processClass >
class f_process_factory : public f_process_factory_base {
public:
f_process_factory() { }
virtual ~f_process_factory() { }
virtual processClass* make() { return new processClass(); }
};
Парень, который написал код, очень умен, поэтому, возможно, для этого есть веская причина.
(Я не могу связаться с ним, чтобы спросить)