我正在尝试存储指向对象的指针,以便稍后可以调用该对象中的函数。我想在不知道对象类型的情况下执行此操作(我知道基础对象但不知道派生对象)
我在示例中使用 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();
我只是想找出实现它的最佳方法。我认为类模板是合适的,但可以在定义的正确语法中使用一些帮助。
多态性的全部要点是能够在指向基类的指针/引用上调用虚方法,而不必知道被指向/引用的实际派生类型。使用
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!