这可能是不可能的,但是 c++ 之前让我感到惊讶,所以就这样吧。
我有这个基类和三个几乎相同的子类:
class MyBaseClass {
};
class MyClassX : public MyBaseClass {
public:
static MyClassX *create() { return new MyClassX(); }
};
class MyClassY : public MyBaseClass {
public:
static MyClassY *create() { return new MyClassY(); }
};
class MyClassZ : public MyBaseClass {
public:
static MyClassZ *create() { return new MyClassZ(); }
};
我可以这样称呼他们:
MyClassY *myObjectY = MyClassY::create();
我想缩短它,以便基类可以完成工作,并且我不必为每个子类重复该 create() 定义。
class MyBaseClass {
public:
template<typename CalledForWhichClass>
static CalledForWhichClass *create() {
return new CalledForWhichClass();
}
};
class MyClassX : public MyBaseClass { };
class MyClassY : public MyBaseClass { };
class MyClassZ : public MyBaseClass { };
但是,使用此设置,我现在必须将其称为:
MyClassY myObjectY = MyBaseClass::create<MyClassY>();
但我想成功,所以我仍然可以像以前一样称呼他们:
MyClassY *myObjectY = MyClassY::create();
我希望也许有一些像这样的黑魔法:
class MyBaseClass {
public:
template<typename CalledForWhichClass = __static_context__>
static CalledForWhichClass *create() {
return new CalledForWhichClass();
}
};
有任何想法吗?