2010-08-28 128 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

相关问题