昨天我发现了一种疯狂的方法来模拟虚构造函数的行为:
template <class T>
class AbstractEnforcer{
protected:
AbstractEnforcer(){}
private:
static void Enforcer(){
delete new T();
delete new T(*(new unsigned int));
delete new T(*(new unsigned int, *(new QString));
}
}
class AbstractClass : private AbstractEnforcer<AbstractClass>{
}
这种方法的唯一不便之处在于我必须使用以下语法声明所有派生类:
class X : private AbstractEnforcer<X>
即使这不是一个问题; 因为Enforcer()方法从未被调用(即使它什么也不做[希望如此!])
我的问题是: “有没有一种方法(不使用宏),可以强制派生类使用此机制,而无需将AbstractClass参数化(因为这只适用于一级派生)?”
template <class T>
class AbstractClass : private AbstractEnforcer<T>{
}