需要在不知道C++中对象数据类型的情况下使用指向对象的指针

问题描述 投票:0回答:1

我正在尝试存储指向对象的指针,以便稍后可以调用该对象中的函数。我想在不知道对象类型的情况下执行此操作(我知道基础对象但不知道派生对象)

我在示例中使用 void * 但我知道这不是解决方案。

struct rec {
    void *obj;
} myvar;

class A {
    void add() {
        myvar.obj = this;
    }
    virtual void foo();
}
class B : public A {
    void foo() {}
}
class C : public A {
    void foo() {}
}

C c;
c.add();

myvar.obj->foo();

我只是想找出实现它的最佳方法。我认为类模板是合适的,但可以在定义的正确语法中使用一些帮助。

c++ pointers templates inheritance
1个回答
0
投票

多态性的全部要点是能够在指向基类的指针/引用上调用虚方法,而不必知道被指向/引用的实际派生类型。使用

void*
绕过该系统。所以存储一个指向基类的指针。

class A; // <-- forward declaration to base class

struct rec {
    A *obj; // <-- use the base class, not void
} myvar;

class A {
public:
    void add() {
        myvar.obj = this;
    }
    virtual void foo();
};

class B : public A {
public:
    void foo() { ... }
};

class C : public A {
public:
    void foo() { ... }
};

C c;
c.add();

myvar.obj->foo(); // <-- OK now!

在线演示

© www.soinside.com 2019 - 2024. All rights reserved.