关于此代码的:: *含义

时间:2016-10-14 10:28:58

标签: c++

我正在刷新一些关于函数指针的遗忘概念,以创建某种类型的包装类来处理回调调用。

在Google上冲浪后,我发现了这个简单而有趣的帖子 http://blog.coldflake.com/posts/C++-delegates-on-steroids/

到目前为止,我几乎了解除此之外的所有内容

    T::*TMethod

我记得:: *的含义,你可以看到在帖子的很多部分,这是作者第一次使用它

class Delegate
{
    typedef void (*Type)(void* callee, int);
public:
    Delegate(void* callee, Type function)
        : fpCallee(callee)
        , fpCallbackFunction(function) {}
    template <class T, void (T::*TMethod)(int)> <<<<<<First time
    static Delegate from_function(T* callee)
    {
        Delegate d(callee, &methodCaller<T, TMethod>);
        return d;
    }
    void operator()(int x) const
    {
        return (*fpCallbackFunction)(fpCallee, x);
    }
private:
    void* fpCallee;
    Type fpCallbackFunction;
    template <class T, void (T::*TMethod)(int)>
    static void methodCaller(void* callee, int x)
    {
        T* p = static_cast<T*>(callee);
        return (p->*TMethod)(x);
    }
};

到目前为止,我对如何运作的概念有所了解,但我不记得:: *

的含义

我知道这是一个基本而又愚蠢的问题,所以请你好。

最好的问候

1 个答案:

答案 0 :(得分:2)

它是指向T类的成员函数的函数指针。

简单示例:

class A { 
    int func() { return 1; }
public:
    int (A::*pf)();

    A() : pf(&A::func) {}
};

int main() { 
   A obj;
   std::cout << (obj.*obj.pf)();
   return 0;
}