【问题标题】:About meaning of ::* on this code [duplicate]关于此代码上 ::* 的含义 [重复]
【发布时间】:2017-02-23 18:07:58
【问题描述】:

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

在谷歌上冲浪后,我发现了这篇简单但有趣的帖子 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);
    }
};

到目前为止,我了解它的工作原理,但我不记得 ::* 的含义

我知道这可能是一个非常基本和愚蠢的问题,所以请客气。

最好的问候

【问题讨论】:

  • 它是一个成员函数指针

标签: c++


【解决方案1】:

它是一个指向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;
}

【讨论】:

  • 大家好,感谢您的回答,我正在阅读建议的帖子以复习一些概念,再次感谢您的帮助
猜你喜欢
  • 2014-03-26
  • 2010-11-08
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2018-06-11
  • 2016-12-11
  • 2013-09-13
  • 1970-01-01
相关资源
最近更新 更多