首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >抽象基类的QPointer

抽象基类的QPointer
EN

Stack Overflow用户
提问于 2011-04-14 08:29:18
回答 1查看 1.9K关注 0票数 1

我正在编写一个表达式解析库。它是用Qt编写的,我有一个这样的类结构:

表达式所有部分的QCExpressionNode-Abstract基类

表达式中的QCConstantNode-Constants (扩展QCExpressionNode)

表达式中的QCVariableNode-Variables (扩展QCExpressionNode)

QCBinaryOperatorNode-Binary加法、减法、乘法、除法和幂运算符(扩展QCExpressionNode)

我希望能够使用智能指针(如QPointerQSharedPointer),但我遇到了以下挑战:

-Can a QPointer可以与抽象类一起使用?如果有,请举例说明。

QPointer转换为具体的子类的-How?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 09:49:33

我看不出你有什么理由不能这么做。举个例子:

代码语言:javascript
复制
class Parent : public QObject
{
public:
   virtual void AbstractMethod() = 0;
};

class Child: public Parent
{
public:
   virtual void AbstractMethod() {  }

   QString PrintMessage() { return "This is really the Child Class"; }
};

现在像这样初始化一个QPointer:

代码语言:javascript
复制
QPointer<Parent> pointer = new Child();

然后,您可以像通常使用QPointer一样调用“抽象”类上的方法

代码语言:javascript
复制
pointer->AbstractMethod();

理想情况下,这就足够了,因为您可以使用父类中定义的抽象方法来访问所需的所有内容。

但是,如果您确实需要区分子类或使用仅存在于子类中的内容,则可以使用dynamic_cast。

代码语言:javascript
复制
Child *_ChildInstance = dynamic_cast<Child *>(pointer.data());

// If _ChildInstance is NULL then pointer does not contain a Child
// but something else that inherits from Parent
if (_ChildInstance != NULL)
{
   // Call stuff in your child class
   _ChildInstance->PrintMessage();
}

我希望这能有所帮助。

额外注意:您还应该检查pointer.isNull(),以确保QPointer确实包含某些内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5657269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档