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