【发布时间】:2020-07-16 10:16:58
【问题描述】:
我正在使用这个成员函数来获取指向对象的指针:
virtual Object* Create()
{
return new Object();
}
它是虚拟的,所以我可以获得指向派生对象的指针,现在我这样做:
virtual Object* Create()
{
return new Foo();
}
它工作正常,但我想做这样的事情来防止任何错误,也让它更容易,所以我不必每次创建新类时都重写该函数:
virtual Object* Create()
{
return new this();
}
我试图找到如何做到这一点,但找不到任何有用的东西,也许这是不可能的。我正在使用带有 C++17 的 MSVC 编译器
【问题讨论】:
-
如果我正确理解了您的问题,您希望在基类中
Create的定义中检索对象的实际(动态)类型。无需覆盖Create。我对吗?如果是这样,我不明白您为什么接受实际上需要覆盖的答案。 -
无论如何,您基本上是在尝试解决与 clone 模式 中出现的问题相同的问题,而无需覆盖 clone 函数。这可以在 CRTP 的帮助下实现;参见,例如,this article。
-
@DanielLangr 主要是我需要知道怎么做
new this(),覆盖对我来说没什么问题,我只需要防止错误
标签: c++ visual-c++ c++17 typetraits