基本クラスを破棄して、このトリックで派生して再作成できますか?
class base: noncopyable
{
base(); //ctor with none param
base(int x); //ctor with one param
base(int x, int y); //ctor with two param
virtual ~base();
}
struct params
{
int x;
int y;
enum
{
typeNoneParam, //neither x nor y is defined
typeOneParam, //only x is defined
typeTwoParam //x and y both are defined
}typeParam;
}
class Derived
{
Derived(params p); //construct base class conditionally by p.typeParam
}
Derived::Derived(params p)
:base() //default typeNoneParam
{
//typeNoneParam need not do special process
if (p.typeParam == params::typeOneParam)
{
base::~base(); //delete the default-typeNoneParam creation by base-dtor
base(p.x); //recreate the new base with one-param base-ctor
}
if (p.typeParam == params::typeOneParam)
{
base::~base(); //delete the default-typeNoneParam creation by base-dtor
base(p.x, p.y); //recreate the new base with two-param base-ctor
}
}
クラス派生およびベースのすべての宣言は変更できません。structparamsも変更できません。
派生クラスの実装のみが変更可能です-許可されています。
誰かがその実装が正しいかについてアイデアを与えることができますか?そして、他のより穏やかな実装は、このシナリオ(動的に選択するbase-ctorを使用したコピー不可能な基本クラスの初期化)を十分に満たしますか?