C++ 指向类成员的指针

C++ 指向类成员的指针,c++,C++,是否有一种方法可以获得指向类成员变量的指针,其方式与静态成员函数中指向类成员函数的指针相同,如下代码所示: uint16_t (Packet::*fncPtr)() = &Packet::someFnc; // get member function pointer Packet p = Packet(); // instantiate class (p.*fncPtr)(); // call member function 一种解决方案可能是实现getter和使用指向的指针 gett

是否有一种方法可以获得指向类成员变量的指针,其方式与静态成员函数中指向类成员函数的指针相同,如下代码所示:

uint16_t (Packet::*fncPtr)() = &Packet::someFnc; // get member function pointer
Packet p = Packet(); // instantiate class
(p.*fncPtr)(); // call member function
一种解决方案可能是实现getter和使用指向的指针 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)

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

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::macSrc
Packet::macDst
的类型是
MacAddr

您还可以将其分解为:

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

print(memberVariablePtr);

现在还不清楚你想要实现什么。你能展示一些(假想的,不工作的)代码并解释它应该做什么吗?我想他正试图用
p
调用
Packet
的成员函数,但提供的代码不公平。投票结果不清楚。我猜他实际上是想得到一个指向成员变量的指针,同样的方法,可以获得指向成员函数的指针…关闭,因此答案是注释:try<代码>使用名称空间std::占位符;int srcOrDst=2;auto refToSrcOrDst=srcOrDst=1?std::bind(&Packet::macSrc,_1):std::bind(&Packet::macDst,_1);包福;std::cout如何使用
memberVariablePtr
来关联创建的对象实例
packet
,以便从对象
packet
获取值?目前,在我看来,您所指向的成员是静态的…@并且与成员函数是相同的,
(packet.*memberVariablePtr)