指向类成员的指针

时间:2017-11-03 10:31:20

标签: c++

有没有办法获取指向类成员变量的指针,就像在静态成员函数中指向类成员函数一样,如下面的代码所示?:

uint16_t (Packet::*fncPtr)() = &Packet::someFnc; // get member function pointer
Packet p = Packet(); // instantiate class
(p.*fncPtr)(); // call member function

一个解决方案可能是实现getter和使用指针  吸气功能。 我不需要它,我只是好奇。

随机示例:

auto packet = Packet();
?someT? memberVariablePtr;    
if(strategy == Strategy::printSrcMac){
    memberVariablePtr = // get pointer to packet.macSrc variable
} else if(strategy == Strategy::printDstMac){
    memberVariablePtr = // get pointer to packet.macDst variable
}

print(memberVariablePtr)

1 个答案:

答案 0 :(得分:2)

您可以使用与创建指向成员函数的指针完全相同的方式创建指向成员的指针:

auto packet = Packet();
MacAddr Packet::*memberVariablePtr = nullptr;

if(strategy == Strategy::printSrcMac) {
    memberVariablePtr = &Packet::macSrc;
} else if(strategy == Strategy::printDstMac) {
    memberVariablePtr = &Packet::macDst;
}

print(memberVariablePtr);

这假设Packet::macSrcPacket::macDst的类型为MacAddr 您也可以将其分解:

auto packet = Packet();
MacAddr Packet::*memberVariablePtr
    = strategy == Strategy::printSrcMac ? &Packet::macSrc
    : strategy == Strategy::printDstMac ? &Packet::macDst
    : nullptr;

print(memberVariablePtr);