是否可以获得调用静态方法的类
Can I get the class for which a static method was called?
这可能是不可能的,但是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++ 中异步调用静态方法?
- 从另一个标头中的标头调用静态方法
- 如何启用使用另一个类的静态方法的模板函数的自动推导,从而消除冗长的调用方代码
- 从部分专用模板方法调用模板非静态方法
- 在子类上调用模板化静态方法时获取类的类型名
- 调用没有主体的未实现静态方法
- 从静态方法调用静态函数指针
- Cython:无法调用共享库的非静态方法
- 调用静态方法,收到错误:LNK2019
- 从线程内的对象调用静态方法
- 如何在C++中宏 #define 静态方法调用?
- 测试项目在访问私有静态方法时遇到问题,尽管我从未直接调用过它
- 在不指定实例化的情况下调用类模板的静态方法的方法
- C 调用静态方法
- 当从静态方法调用非静态Attach时,使用std::packaged_task对CAsyncSocket Detach套
- C++:从静态方法调用继承的静态方法
- C++使用*this从静态方法调用一个抽象方法
- 是否可以从 cpp 中定义的静态方法调用私有构造函数