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)
。