2010-08-28 3 views
1

Я хочу ограничить, что Derived Class должен иметь конструктор по умолчанию. Сейчас я думал его в искаженном видеConstraint - Derived Class должен иметь конструктор по умолчанию

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

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

Другая идея приходит в голову держать метод чисто виртуальной создания() без аргументов.

Но есть ли другой способ? Кроме этих двух. Я думаю об этом на языке C++. Но есть ли способ сделать это в PHP (я ожидаю negetive ответ LOL)

+1

_Why_ Вы хотите это сделать? –

+0

['~ Base()' должно быть либо виртуальным, либо защищенным] (http://www.gotw.ca/publications/mill18.htm), и, как оно написано сейчас, оно утечки объекта 'Derived', и вы можете ' t уничтожить этот объект, потому что вы закончите бесконечный цикл, создавая и уничтожая объекты в деструкторе. –

+0

Причина, по которой эти производные классы будут автоматически создаваться с помощью UnPackerMachine <> –

ответ

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

WoW Человек. Ты заставил меня смеяться громко. хороший трюк. лучше сказать, что вы тянете ногу PHP. никогда не думал, что это будет легко сделать в PHP. Я должен был немного поверить в это. лол –

Смежные вопросы