2010-08-28 132 views
1

我想約束派生類必須有一個默認構造函數。 我目前想它另一個想法想到一個變態的方式約束 - 派生類必須有一個默認構造函數

template <typename Derived> 
class Base{ 
    public: 
    Base(){ 

    } 
    virtual ~Base(){ 
     new Derived; 
    } 
}; 

是保持一個純虛create()方法不帶參數。

但是有沒有其他方法?除了這兩個。 我正在用C++的方式來思考它。但有什麼辦法在PHP中做到這一點(我希望negetive答案LOL)

+1

_你爲什麼要這樣做? – 2010-08-28 17:22:38

+0

['〜Base()'應該是虛擬的或受保護的](http://www.gotw.ca/publications/mill18.htm),因爲它現在被寫入,它會泄漏一個Derived對象,摧毀這個對象,因爲你最終會在無限循環中創建和銷燬析構函數中的對象。 – 2010-08-28 17:24:02

+0

導致這些派生類將由UnPackerMachine自動實例化<> – 2010-08-28 17:26:50

回答

1

是的,有一個在PHP的方式LOL:

abstract class Base { 
    public final function __construct() { 
     $this->constructImpl(); 
    } 
    abstract protected function constructImpl(); 
} 

class Derived extends Base { 
    protected function constructImpl() { 
     /* implementation here */ 
    } 
} 

基本上,你只需要標記構造決賽。

+0

魔獸世界。你讓我大聲笑。好戲。 更好地說你正在拉PHP的腿。 從來沒有想過這會很容易在PHP中完成。我應該保持一些信念。大聲笑 – 2010-08-28 17:31:53

相關問題