我奮力理解爲什麼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(); }
};
編寫代碼的人非常聰明,所以也許有一個很好的理由。
(我不能聯繫他問)
除了它不創建不同類型的't_process'。它調用一個調用'new t_process();'的't_process'工廠,'t_process'類是具體的。 – Stephen 2010-07-23 04:06:58
你怎麼能確定它使用的工廠,如果有多個工廠呢?所有的工廠方法都不是靜態的。它可能指向與示例代碼中提到的不同的類,並使用多態性創建流程實例。 – 2010-07-23 04:19:55
我可以肯定,因爲它在'pprocessor_'的初始化中構建了一個臨時't_process'工廠,然後調用'make()':) – Stephen 2010-07-23 04:22:46