在内部,成员函数始终将 this 指针作为“不可见”的第一个参数,因此您的函数将具有签名 void(myClass *)。如果您可以将 AnotherFunction 的签名更改为void AnotherFunction(std::function<void()> callback)
您可以执行以下操作:
#include <functional>
#include <iostream>
void AnotherFunction(std::function<void()> callback)
{
callback();
}
void fun()
{
std::cout << "fun()" << std::endl;
}
class Foo
{
public:
Foo(int i) : i_(i) { }
static void gun()
{
std::cout << "Foo::gun()" << std::endl;
}
void hun()
{
std::cout << "Foo(" << i_ << ")::hun()" << std::endl;
}
protected:
private:
int i_;
};
int main()
{
Foo foo(666);
AnotherFunction(fun);
AnotherFunction(Foo::gun);
AnotherFunction(std::bind(&Foo::hun, foo));
}
打印:
fun()
Foo::gun()
Foo(666)::hun()