QObject基类到继承对象的C++类型转换
C++ type conversion of a QObject base class to an inherited object
我有类A(..):QObject(..)
和B(..):A(..)
,并创建一个稍后应转换/扩展为类型B:的对象A
A* obA = new A(...);
obA->setMember(true);
...
#ifdef EITHER
obA = new B(...); // --> shouldBeTrue == false, see below
#else
*obA = B(...); // --> Error - see question
#endif
bool shouldBeTrue = obA->getMember();
原因是在创建基础对象时,我还不知道最终的类型。我希望能够用更精细的类型来扩展这个对象,然后可以访问基本对象成员。
我知道C++支持类型转换,但我的代码在调用QObject的复制运算符时导致了一个错误,该运算符被故意设置为私有的,以防止复制QObject"树"。
这是一个概念问题吗?我是不是搞错了?
编辑:添加了另一行,它编译了,但没有像我预期的那样。
克隆QObject
是概念错误。参见:QObject
文档
要从B : public A
的新实例访问A : public QObject
的现有实例,可以在构造函数中将指向现有实例的指针传递给新实例。
A *a = new A();
B *b = new B(a);
在B
的构造函数中,您可以对A
的实例执行任意操作,例如复制其数据部分。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++中的双指针类型转换
- 逐位操作的隐式类型转换
- 模板中的类型转换
- 在 C++(和 C)中进行类型转换时明显不一致
- 字符类型转换不兼容
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- C++:用户定义的显式类型转换函数错误
- 将类指针类型转换为键时出错
- 通过引用传递参数时C++类型转换
- 在 C++ 中将一个模板类型的对象类型转换为另一个模板类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- C++无效的函数类型转换
- 在将派生类指针类型转换为派生类指针后,从基类指针调用派生类函数
- 如何将Windows产品类型转换为名称?
- 通过构造函数方法输出的类到类类型转换是 5500 为什么不是 5555
- 事件系统:使用类型转换或联合进行继承
- 如何在参数中定义隐式类型转换的构造函数?
- 类模板实例化中的类型转换