在我的应用程序中,我必须从基类派生一些类,问题是我想强制派生类具有 3 个特定的构造函数实现。由于 c++ 没有虚拟纯构造函数,这似乎很绝望(我不得不手动检查每个类的实现以确保实现了特定的 ctors,这样做不太有趣)。
昨天我发现了一个疯狂的方法来模拟虚拟 ctor 的行为:
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>{
}