在內部,成員函數總是將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()
什麼實例的'myClass'你希望'pCallback'被叫做? –
這已經成爲9999個問題的一個騙局。 – Puppy
是的,基本上,你會希望它是一個成員函數指針(請參閱相關問題)並考慮上下文。 –