如何在基类中获取派生类的子类型

拉延潘迪特

考虑下面的例子

template <typename T>
class A
{
        typename T::x a;          //not used
        virtual typename T::x* function()=0;
};

class B:public A<B>
{
public:
        typedef XXX x;
        x obj;
        x* function()
        {
             return &obj;
        }

};

在这里我要使用B::xclass内部的类型A

有什么办法吗?

Excelcius

这行不通。为了实例化A,编译器至少需要有一个前向声明x但是您不能转发类型的声明成员,因为这是该类型的实现细节,并且意味着您已经了解该类的某些部分。

但是,您可以尝试将返回类型直接传递给A并将其用作返回类型:

template <typename T>
class A
{
public:
    typedef T ret_type;
    virtual ret_type* function() = 0;
};

class B : public A<int>
{
public:
    A::ret_type obj;
    virtual A::ret_type* function() override
    {
         return &obj;
    }
};

使用这种方法,您可以执行以下操作:

class X : public A<int> { ... };
class Y : public A<int> { ... };

A<int>* p1 = new X();
A<int>* p2 = new Y();
p1->function();
p2->function();

...使基类更加有用。

父母无需了解其子女的任何知识,否则继承就变得毫无意义。在您的情况下,A可以将其视为接口,并且实现该接口的任何类的A<int>行为都将是相同的。相反,如果将子类传递给A,则每个接口实现都是不同且唯一的,即使返回类型可能完全相同。如果确实需要此功能,请考虑制作A一个实用程序类并将其作为成员嵌入到子类中(“偏爱组成而不是继承”)。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从基类获取派生类类型

来自分类Dev

如何从派生类中获取基类实例

来自分类Dev

C#如何从基类的派生类中获取特定类型的所有字段?

来自分类Dev

调用方法时如何从基中获取派生类类型

来自分类Dev

返回派生类类型的基类中的方法?

来自分类Dev

从派生类访问基类中的类型别名

来自分类Dev

从基类中识别派生类的类型

来自分类Dev

有没有办法在基类的函数中获取派生类的类型?

来自分类Dev

如何从基类向量获取派生类的名称

来自分类Dev

如何从基类获取派生类名?

来自分类Dev

通过基类虚函数获取派生类型

来自分类Dev

从抽象基类型的 unique_ptr 获取派生类

来自分类Dev

在基类或扩展Swift的静态方法中获取派生类型的类型名称

来自分类Dev

在基类和派生类上进行操作时,如何返回派生类型?

来自分类Dev

如何从C ++中的基类访问派生类的属性?

来自分类Dev

如何在派生类中重写`toString`并使用基类中的私有实例变量?

来自分类Dev

如何在python中相同的重载派生类方法中调用基类方法?

来自分类Dev

如何在C ++中的基类中创建派生类的对象

来自分类Dev

在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

来自分类Dev

如何访问子类派生类中实现的接口方法?

来自分类Dev

基类不实现INotifyPropertyChange;如何在派生类中实现它?

来自分类Dev

如何在派生类中存储在基类初始化期间获得的信息?

来自分类Dev

如何在几何基类中检查冲突而不转换为派生类

来自分类Dev

如何在模板派生类中调用模板基类的构造函数?

来自分类Dev

如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

来自分类Dev

如何在派生类中初始化基类staic内联数据成员?

来自分类Dev

如何在派生类中存储在基类初始化期间获得的信息?

来自分类Dev

如何在C#WPF中为派生类的基类设置值

来自分类Dev

如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

Related 相关文章

  1. 1

    如何从基类获取派生类类型

  2. 2

    如何从派生类中获取基类实例

  3. 3

    C#如何从基类的派生类中获取特定类型的所有字段?

  4. 4

    调用方法时如何从基中获取派生类类型

  5. 5

    返回派生类类型的基类中的方法?

  6. 6

    从派生类访问基类中的类型别名

  7. 7

    从基类中识别派生类的类型

  8. 8

    有没有办法在基类的函数中获取派生类的类型?

  9. 9

    如何从基类向量获取派生类的名称

  10. 10

    如何从基类获取派生类名?

  11. 11

    通过基类虚函数获取派生类型

  12. 12

    从抽象基类型的 unique_ptr 获取派生类

  13. 13

    在基类或扩展Swift的静态方法中获取派生类型的类型名称

  14. 14

    在基类和派生类上进行操作时,如何返回派生类型?

  15. 15

    如何从C ++中的基类访问派生类的属性?

  16. 16

    如何在派生类中重写`toString`并使用基类中的私有实例变量?

  17. 17

    如何在python中相同的重载派生类方法中调用基类方法?

  18. 18

    如何在C ++中的基类中创建派生类的对象

  19. 19

    在C#中的基类中使用泛型:如何确保基类中的方法返回派生类的类型?

  20. 20

    如何访问子类派生类中实现的接口方法?

  21. 21

    基类不实现INotifyPropertyChange;如何在派生类中实现它?

  22. 22

    如何在派生类中存储在基类初始化期间获得的信息?

  23. 23

    如何在几何基类中检查冲突而不转换为派生类

  24. 24

    如何在模板派生类中调用模板基类的构造函数?

  25. 25

    如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

  26. 26

    如何在派生类中初始化基类staic内联数据成员?

  27. 27

    如何在派生类中存储在基类初始化期间获得的信息?

  28. 28

    如何在C#WPF中为派生类的基类设置值

  29. 29

    如何在Scala中从派生类辅助构造函数调用辅助基类构造函数?

热门标签

归档