首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:成员函数的指针

C++:成员函数的指针
EN

Stack Overflow用户
提问于 2021-01-13 15:58:56
回答 1查看 53关注 0票数 0
代码语言:javascript
运行
复制
namespace Borg
{
 class BorgQueen
 {
 public:
   BorgQueen();
   bool move(Borg::Ship *ship, Destination dest) {return ship->move(dest);}
   void fire(Borg::Ship *ship, Federation::Starfleet::Ship *target) {ship->fire(target);}
   void destroy(Borg::Ship *ship, Federation::Ship *target) {ship->fire(target);}
 
   void (Borg::BorgQueen::*firePtr)(Borg::Ship *ship, Federation::Starfleet::Ship *target) = &Borg::BorgQueen::fire;
   void (Borg::BorgQueen::*destroyPtr)(Borg::Ship *ship, Federation::Ship *target) = &Borg::BorgQueen::destroy;
   bool (Borg::BorgQueen::*movePtr)(Borg::Ship *ship, Destination dest) = &Borg::BorgQueen::move;
 };
};

我需要有一个关于我类中的内存的指针: movePtr -> move();这是我要做的,但是我可以访问它(指针);如何从ptr调用它呢?

代码语言:javascript
运行
复制
int main()
{
   Borg::BorgQueen Q();
   [...]
   // this does work 
   Q.movePtr(...);
   Q.*movePtr(...);
   *(Q.movePtr)(...)


}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 16:05:41

.*的右侧不是在左侧的上下文中解析的,而是在当前的范围内解析的。

如下所示:

代码语言:javascript
运行
复制
int main()
{
    bool (Borg::BorgQueen::*go)(Borg::Ship *ship, Destination dest) = &Borg::BorgQueen::move;
    Borg::BorgQueen queen;
    //...
    (queen.*go)(something something...);
}

Q是您的对象,其成员名为Q.movePtr,“取消引用指针到成员”操作符为.*,因此您需要

代码语言:javascript
运行
复制
(Q.*Q.movePtr)(...);

指向成员的指针看起来非常整洁,直到您注意到它们很容易使您的代码完全不可读。

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

https://stackoverflow.com/questions/65705448

复制
相关文章

相似问题

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