我正在刷新一些关于函数指针的遗忘概念,以创建某种类型的包装类来处理回调调用。
在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);
}
};
到目前为止,我对如何运作的概念有所了解,但我不记得:: *
的含义我知道这是一个基本而又愚蠢的问题,所以请你好。
最好的问候
答案 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;
}