访问C++矢量元素而不进行强制转换
Accessing C++ vector elements without casting
我正在使用MoSync/MAUI创建移动应用程序原型,但我遇到了该类的问题继承:
标准MAUI小部件的类层次结构是:
Widget
EditBox
Label
ListBox
...
然后,因为我想为所有的小部件添加一个标准行为,我制作了一个单独的类来定义该行为:
class xFocusControl:
public:
void method1() {};
void method2() {};
int member1;
....
并对每个小部件类型进行子类划分:
class xEditBox: public xFocusCtrl, public EditBox
{
public:
...
}
class xLabel: public xFocusCtrl, public Label
{
public:
...
}
...
然后,在一些地方,我需要使用MoSync getChildren()函数访问所有的小部件,定义为:
const Vector<Widget*>& MAUI::Widget::getChildren()
我的问题是:给定这个层次结构,我可以迭代所有的子对象,但不能访问没有强制转换的新行为(例如:widget->member1)。但是,我如何将每个小部件通用地转换为它的阶级?到目前为止,我正在用之类的代码测试每个可能的小部件类
member1 = 0;
if (isType <xLabel*> (widget)) {
member1 = ((xLabel*) (widget))->member1;
}
if (isType <xEditBox*> (widget)) {
member1 = ((xEditBox*) (widget))->member1;
}
...
但这对我来说很糟糕:我是一个C++新手,而且更精通Python等动态语言,所以我可能采取了错误的方法。
你介意有更好的方法吗?
如评论中所述,我使用常规强制转换而不是dynamic_cast,因为到目前为止MoSync不支持dynamic_cast
您应该使用dynamic_cast
xLabel* label = dynamic_cast<xLabel*>(widget);
if (label)
{
member1 = label->member1;
}
// dynamic cast failed
else
{
}
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++