#include <iostream>
#include <vector>
using namespace std;
class Base
{
public:
void speak() { cout << "Hello!"; }
};
class Derived1 : public Base
{
public:
void func1() { cout << "I'm a function!"; }
};
class Derived2 : public Base
{
public:
void func2() { cout << "I'm also a function!"; }
};
int main()
{
vector<Base*> v = { new Derived1(), new Derived2(), new Derived1(), new Derived2() //, ...
};
// For each Derived1 object invoke func1() and for each Derived2 object invoke func2()
}
Base不是多态的(没有虚函数)。从这些条件中,我如何能够为每个Derived1对象调用func1,为每个Derived2对象调用func2?
答案 0 :(得分:1)
“Base不是多态的(没有
virtual
函数)。”
只要您确定在特定索引处获得的内容,您仍然可以执行static_cast<Derived1>(v[0])
/ static_cast<Derived2>(v[1])
,a.s.o.
答案 1 :(得分:0)
原样,这是不可能的。你不能dynamic_cast
,没有指明一种类型或另一种类型的成员。鉴于Base*
是Derived1*
还是Derived2*
,绝对无法区分。
您必须执行以下操作之一:
添加两个不同类会覆盖的virtual void func() = 0;
。
添加std::function<void()>
类型的成员变量,该变量将在Base
构造函数中以两个Derived
类的方式设置。
添加一个枚举的成员变量,以指示它是Derived
,以便您可以在外部进行切换以执行安全static_cast
。
添加virtual ~Base()
以便代替切换,您可以执行dynamic_cast
。
实际上Derived1
或Derived2
实际上并非Base
,而是variant<Derived1, Derived2>
。
???
利润。