小编Xav*_*ues的帖子

std :: function参数子类

我试图避免使用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 
Run Code Online (Sandbox Code Playgroud)

现在一切都很好,但是当我想在方法中使用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
Run Code Online (Sandbox Code Playgroud)

如果我想能够调用方法(&B :: testCallbackB),我需要输入一个函数指针并以这种方式强制转换:

typedef void (A::*Callback)();

std::function<void(A*)> call = (Callback)&B::testCallbackB; // this works …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

0
推荐指数
1
解决办法
390
查看次数

标签 统计

c++ ×1

c++11 ×1