是否可以在同一类中创建一个类的实例?

拉胡尔·艾耶(Rahul Iyer)

说我有一堂课:

class Foo{
public:

    Foo(){
    }

    //Is it possible to create a function like this:
    virtual Foo* createOb(){
       //Should create a new Foo,Bar or Fiz, depending on the actual object type.
    }
}

class Bar: public Foo{
public:

    Bar(){
    }
}

class Fiz: public Foo{
public:

    Fiz(){
    }
}

createOb()在基类中是否可能有一个方法,因此在派生类之一的实例上调用createOb()时,就创建了派生类的实例?

博洛夫

是的,可以使用CRTP来完成

首先,返回从中获取的原始指针new非常危险的c++原始指针中,仅当它们不具有指向对象的所有权时才应使用。所以我自由使用unique_ptr

struct Base {
  virtual auto create_obj() -> std::unique_ptr<Base>
  {
    return std::unique_ptr<Base>{};
  }
};

// abstract works too:
struct Base {
  virtual auto create_obj() -> std::unique_ptr<Base> = 0;
};

template <class Derived>
struct Base_crtp : Base {
  auto create_obj() -> std::unique_ptr<Base> override /* final */
  {
    return std::unique_ptr<Base>{new Derived{}};
  }
};

struct D1 : Base_crtp<D1>
{
};

struct D2 : Base_crtp<D2>
{
};

接着:

auto b1 = std::unique_ptr<Base>{new D1{}};
auto b2 = std::unique_ptr<Base>{new D2{}};

auto new_d1 = b1->create_obj();
auto new_d2 = b2->create_obj();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

你可以给一个方法一个属性,该属性是由pygame中同一类中的另一个方法创建的吗?

来自分类Dev

一个类可以使用__init__方法来创建同一类的其他实例吗?

来自分类Dev

如何将在类方法中创建的实例粘贴到同一类中的另一个方法?

来自分类Dev

为什么要将一个类的线程函数设为静态以便在同一类中可以访问?

来自分类Dev

在类中调用同一类的实例

来自分类Dev

为什么可以声明一个方法来返回正在创建的同一类的类型?

来自分类Dev

当我们在同一类中创建类的实例时会发生什么?

来自分类Dev

一个实例如何更改同一类的另一个实例的某些变量

来自分类Dev

Python:如何在同一个类中获取类的创建实例?

来自分类Dev

是否可以检查一个类是否在不创建实例的情况下扩展了Java中的另一个类?

来自分类Dev

如何检查两个实例是否属于同一类Python

来自分类Dev

如何判断两个javascript实例是否属于同一类类型?

来自分类Dev

在python的同一类中的另一个方法中调用一个类的方法

来自分类Dev

在 Kotlin 中访问同一类的不同实例的字段

来自分类Dev

从同一类的实例中检索属性及其描述

来自分类Dev

是否只允许Java中的另一个类创建特定类的实例?

来自分类Dev

将类对象附加到同一类对象的另一个实例中的列表变量时出现的问题

来自分类Dev

如何检查一个方法是否从同一类调用另一个方法?

来自分类Dev

PHP-从同一类中的另一个类变量设置类变量?

来自分类Dev

是否将在C#中为类的每个实例创建一个属性实例?

来自分类Dev

我可以在同一个类的实例方法中释放ivar吗?(目标C)

来自分类Dev

是否可以创建一个类,其每个实例将具有不同的类型?

来自分类Dev

是否可以创建一个维护实例字典的单例工厂类?

来自分类Dev

在c#中动态创建同一个类的多个对象实例

来自分类Dev

是否可以确定实例化一个类的当前实例的类的实例?

来自分类Dev

如何模拟正在测试的同一类中的另一个方法?

来自分类Dev

同一类的另一个构造函数中的c ++调用构造函数

来自分类Dev

Django模型引用同一类的属性中的另一个属性

来自分类Dev

从同一类中的另一个构造函数访问构造函数变量

Related 相关文章

  1. 1

    你可以给一个方法一个属性,该属性是由pygame中同一类中的另一个方法创建的吗?

  2. 2

    一个类可以使用__init__方法来创建同一类的其他实例吗?

  3. 3

    如何将在类方法中创建的实例粘贴到同一类中的另一个方法?

  4. 4

    为什么要将一个类的线程函数设为静态以便在同一类中可以访问?

  5. 5

    在类中调用同一类的实例

  6. 6

    为什么可以声明一个方法来返回正在创建的同一类的类型?

  7. 7

    当我们在同一类中创建类的实例时会发生什么?

  8. 8

    一个实例如何更改同一类的另一个实例的某些变量

  9. 9

    Python:如何在同一个类中获取类的创建实例?

  10. 10

    是否可以检查一个类是否在不创建实例的情况下扩展了Java中的另一个类?

  11. 11

    如何检查两个实例是否属于同一类Python

  12. 12

    如何判断两个javascript实例是否属于同一类类型?

  13. 13

    在python的同一类中的另一个方法中调用一个类的方法

  14. 14

    在 Kotlin 中访问同一类的不同实例的字段

  15. 15

    从同一类的实例中检索属性及其描述

  16. 16

    是否只允许Java中的另一个类创建特定类的实例?

  17. 17

    将类对象附加到同一类对象的另一个实例中的列表变量时出现的问题

  18. 18

    如何检查一个方法是否从同一类调用另一个方法?

  19. 19

    PHP-从同一类中的另一个类变量设置类变量?

  20. 20

    是否将在C#中为类的每个实例创建一个属性实例?

  21. 21

    我可以在同一个类的实例方法中释放ivar吗?(目标C)

  22. 22

    是否可以创建一个类,其每个实例将具有不同的类型?

  23. 23

    是否可以创建一个维护实例字典的单例工厂类?

  24. 24

    在c#中动态创建同一个类的多个对象实例

  25. 25

    是否可以确定实例化一个类的当前实例的类的实例?

  26. 26

    如何模拟正在测试的同一类中的另一个方法?

  27. 27

    同一类的另一个构造函数中的c ++调用构造函数

  28. 28

    Django模型引用同一类的属性中的另一个属性

  29. 29

    从同一类中的另一个构造函数访问构造函数变量

热门标签

归档