我可以获取为其调用静态方法的类吗? [英] Can I get the class for which a static method was called?
问题描述
这可能是不可能的,但是c ++之前让我感到惊讶,所以去了.
This is probably impossible, but c++ has surprised me before, so here goes.
我有这个基类和三个近似相同的子类:
I have this base class and three near-identical subclasses:
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()定义.
and I want to shorten that so the base class can do the work, and I don't have to repeat that create() definition for every subclass.
class MyBaseClass {
public:
template<typename CalledForWhichClass>
static CalledForWhichClass *create() {
return new CalledForWhichClass();
}
};
class MyClassX : public MyBaseClass { };
class MyClassY : public MyBaseClass { };
class MyClassZ : public MyBaseClass { };
但是,使用此设置,我现在必须将其命名为:
however, with this setup, I now have to call it like:
MyClassY myObjectY = MyBaseClass::create<MyClassY>();
但是我想做到这一点,所以我仍然可以像以前那样称呼他们
but I want to make it so I can still call them like I used to:
MyClassY *myObjectY = MyClassY::create();
我希望也许会有这样的黑魔法:
I was hoping perhaps there was some black magic like this:
class MyBaseClass {
public:
template<typename CalledForWhichClass = __static_context__>
static CalledForWhichClass *create() {
return new CalledForWhichClass();
}
};
有什么想法吗?
推荐答案
如何使用CRTP?
template <typename Derived>
struct BasicMyClass : MyBaseClass {
static Derived *create() { return new Derived(); }
};
struct MyClassX : public BasicMyClass<MyClassX> {};
struct MyClassY : public BasicMyClass<MyClassY> {);
struct MyClassZ : public BasicMyClass<MyClassZ> {);
您可以使用此模板自动为您创建create
成员函数,而不是试图让基类来工作.
Instead of trying to make the base class do the work, you use this template to automatically create the create
member function for you.
这篇关于我可以获取为其调用静态方法的类吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!