静态函数定义,类似于指向成员函数的指针

时间:2014-04-16 09:41:06

标签: c++

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

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

  static iplist<Instruction> BasicBlock::*getSublistAccess(Instruction*) {
    return &BasicBlock::InstList;
  }
}

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

3 个答案:

答案 0 :(得分:1)

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

iplist<Instruction> BasicBlock::*

,指向类BasicBlock的非静态数据成员的指针,其中数据类型为iplist<Instruction>

getSublistAccess实际返回的是&BasicBlock::InstList,这正是类BasicBlock的非静态数据成员,其中数据类型为InstListType。即,iplist<Instruction>

答案 1 :(得分:0)

是一个功能指针 您可以阅读 this article 了解详细信息。

答案 2 :(得分:0)

感谢 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;
}

尝试一下:http://ideone.com/hYgfh8