这只是为了学习目的,因为我似乎在其他任何地方都找不到这样的答案..所以我有多个问题..我不会做这样的事情,但我只想知道,因为我的大脑需要我知道或者我剩下的一天会很不舒服。
假设我有以下课程:
class Control
{
//virtual stuff..
};
class Button : public Control
{
//More virtual stuff..
};
class CheckBox : public Control
{
//More virtual stuff..
};
因此 Button 和 CheckBox 是同一个母控件的姐妹。
现在假设像 moi 这样好奇的人看到这样的东西:
std::vector<Control> ListOfControls; //Polymorphic Array.
ListOfControls.push_back(Button()); //Add Button to the Array.
ListOfControls.push_back(CheckBox()); //Add CheckBox to the Array.
如何判断 Array 包含哪些数据类型?我怎么知道 ListOfControls[0] 拥有一个 Button 而 ListOfControls[1] 拥有一个 CheckBox?我读到您很可能必须进行动态转换,如果它不返回 null,那就是特定的数据类型:
if (dynamic_cast<Button*>(ListOfControls[0]) == ???) //I got lost.. :(
另一件事让我忘记:
假设上面的类相同,你如何判断:
std::vector<void*> ListOfControls; //Polymorphic Array through Pointer.
ListOfControls.push_back(new Button()); //Add Button to the Array.
ListOfControls.push_back(new CheckBox()); //Add CheckBox to the Array.
有没有办法在没有动态转换的情况下完成上述两个示例,或者是否有某种技巧可以绕过它?我读到动态演员通常是不需要的。
最后,你可以从父母向下投到孩子吗?
Button Btn;
Control Cn;
Btn = (Button) Cn; //???