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调用它呢?
int main()
{
Borg::BorgQueen Q();
[...]
// this does work
Q.movePtr(...);
Q.*movePtr(...);
*(Q.movePtr)(...)
}
发布于 2021-01-13 16:05:41
.*
的右侧不是在左侧的上下文中解析的,而是在当前的范围内解析的。
如下所示:
int main()
{
bool (Borg::BorgQueen::*go)(Borg::Ship *ship, Destination dest) = &Borg::BorgQueen::move;
Borg::BorgQueen queen;
//...
(queen.*go)(something something...);
}
Q
是您的对象,其成员名为Q.movePtr
,“取消引用指针到成员”操作符为.*
,因此您需要
(Q.*Q.movePtr)(...);
指向成员的指针看起来非常整洁,直到您注意到它们很容易使您的代码完全不可读。
https://stackoverflow.com/questions/65705448
复制相似问题