我有一些课程:
class Base
{
public:
virtual void Something() = 0;
}
class A : public Base
{
public:
virtual void Something() { /*...*/ }
void SpecialActionForA();
}
class B : public Base
{
public:
virtual void Something() { /*...*/ }
void SpecialActionForB();
}
和一个数组:
Base* MyMembers[2];
MyMembers[0] = new A;
MyMembers[1] = new B;
我想做:
A* pointer_to_a = Get(0);
B* pointer_to_b = Get(1);
有没有什么好的方法来实现这个Get()
功能?
我的解决方案是:
template <typename T>
T* Get(int index)
{
return dynamic_cast<T*>(MyMembers[index]);
}
但首先我必须写
A* pointer_to_a = Get<A>(0)
这需要额外的<A>
;
第二件事是,如果以某种方式new
搞砸了:
MyMembers[0] = new B;
然后Get()
失败了。
我想要的是一种可以将索引 0 映射到 A 的自动机制。
额外细节:实际上我有80
不同的类派生自Base
(它们是我的用户界面),
我需要的是让真正的类(真正的 UI)来做事。
我需要使用的功能是上面的SpecialActionForA()
......等等。
也被Something()
使用,但处于这些 UI 的初始化阶段,或者由 UI 管理器系统管理的东西。