gpt4 book ai didi

c++ - 我可以获得调用静态方法的类吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:51:19 27 4
gpt4 key购买 nike

这可能是不可能的,但 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();
}
};

有什么想法吗?

最佳答案

使用 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 成员函数。

关于c++ - 我可以获得调用静态方法的类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15629480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com