我试图避免使用 C 风格的函数指针来支持 std::function 对象,但是在继承时调用成员函数时遇到问题。
我有一个接收 std::function 的方法:
class A
{
public:
void testCallbackA();
// this is unrelated, but I need some features from the superclass
void goingToNeedThisWhenCallingTestCallbackA(int someParams);
};
void method(std::function<void(A*)> callback);
method(&A::testCallbackA); // this works fine
现在一切都很好,但是当我想使用带有方法的 A 子类时,我需要转换函数指针:
class B : public A
{
public:
void testCallbackB() { }
};
method(&B::testCallbackB); // this fails
std::function<void(A*)> call = &B::testCallbackB; // this fails
std::function<void(B*)> call = &B::testCallbackB; // this works
如果我希望能够调用 method(&B::testCallbackB) 我需要 typedef 一个函数指针并以这种方式进行转换:
typedef void (A::*Callback)();
std::function<void(A*)> call = (Callback)&B::testCallbackB; // this works
我可以避免这种typedef吗?我可以避免演员吗?我试过调查 std::bind 没有运气。
有任何想法吗?