C++ 类似于成员函数指针的静态函数定义

C++ 类似于成员函数指针的静态函数定义,c++,C++,我正在研究LLVM源代码,但从未遇到以下语法: class BasicBlock { public: typedef iplist<Instruction> InstListType; private: InstListType InstList; static iplist<Instruction> BasicBlock::*getSublistAccess(Instruction*) { return &BasicBlock::Ins

我正在研究LLVM源代码,但从未遇到以下语法:

class BasicBlock {
 public:
  typedef iplist<Instruction> InstListType;
 private:
  InstListType InstList;

  static iplist<Instruction> BasicBlock::*getSublistAccess(Instruction*) {
    return &BasicBlock::InstList;
  }
}
类基本块{
公众:
typedef-iplist-InstListType;
私人:
InstListType InstList;
静态iplist BasicBlock::*getSublistAccess(指令*){
return&BasicBlock::InstList;
}
}

上述定义是什么?起初,它似乎是一个正常的静态函数,但我不理解
BasicBlock::*
部分。似乎是一个静态函数,它返回一个成员函数指针,并直接执行该成员函数的代码。

静态成员函数的返回类型
getSublistAccess

iplist<Instruction> BasicBlock::*
iplist基本块::*
也就是说,指向类
BasicBlock
的非静态数据成员的指针,其中数据类型为
iplist


getSublistAccess
实际返回的是
&BasicBlock::InstList
,它正是类
BasicBlock
的非静态数据成员,其中数据类型为
InstListType
。i、 例如,
iplist
是一个函数指针。

您可以阅读了解详细信息。

感谢iavr提供答案。我将答案授予他,但我想在这里补充一些细节,希望能帮助阅读本文的人

正如iavr向我解释的那样,我的问题可以通过以下代码理解:

#include <iostream>
using namespace std;

struct customType {
    int b;
    };
struct Instruction {};

class BasicBlock {
public:

 BasicBlock(int a) { InstList.b = a; }
 customType InstList;

  static customType BasicBlock::*getSublistAccess(Instruction*) {
    return &BasicBlock::InstList;
  }
};

int main() {

    BasicBlock bb(90);

    Instruction justForSignature;
    // Get a pointer to a member of type customType through the static function
    customType BasicBlock::* ptrToMember = BasicBlock::getSublistAccess(&justForSignature);

    cout << (bb.*ptrToMember).b; // Parenthesis are necessary, '.' has higher precedence on *
    // Output: 90

    return 0;
}
#包括
使用名称空间std;
结构自定义类型{
int b;
};
结构指令{};
类基本块{
公众:
基本块(inta){InstList.b=a;}
自定义类型列表;
静态customType BasicBlock::*getSublistAccess(指令*){
return&BasicBlock::InstList;
}
};
int main(){
基本块bb(90);
签名指示;
//通过静态函数获取指向customType类型成员的指针
customType BasicBlock::*ptrToMember=BasicBlock::getSublistAccess(&justForSignature);

谢谢,没有使用
Instruction*
参数,对吗?不,不是这种情况。
getSublistAccess
不是函数指针。请试用我刚才发布的代码。顺便说一下,要获得函数指针,需要额外的括号:
iplist(BasicBlock:*getSublistAccess)(Instruction*)