首页 > 解决方案 > 在 C++ 中绑定派生类方法以从分离的 std::function 变量中调用,在实例范围之外

问题描述

考虑拥有一个由多个子类继承的基类。

是否可以绑定它的一些方法来创建可以直接调用而不是从继承的类实例中调用的函数。

下面的例子应该强调这种情况:


class A {
    virtual void method(int a, int b) { ... } 
};

class B : public A {
    virtual void method(int a, int b) { ... }
};
class C : public A {
    virtual void method(int a, int b) { ... }
};


void main () {

    A * a = new B();
    A * aa= new C();

    std::function<void(int,int)> f1 = std::bind(&A::method, &a);
    std::function<void(int,int)> f2 = std::bind(&A::method, &aa);

    f(1,2); 
    f(2,3); 
    ...
}

但是,由于以下错误,它无法编译:

No viable conversion from '__bind<void (A::*)(int, int), A **>' to 'std::function<void (int, int)>'

也许有人可以帮我解决它?

标签: c++

解决方案


您需要为您的论点使用占位符。我还将从第二个参数中删除引用,因为您已经有了一个指针,并且传递对指针的引用将传递指针的地址,这不是您想要的。

std::function<void(int,int)> f1 = std::bind(&A::method, a, std::placeholders::_1, std::placeholders::_2);

希望这可以帮助。


推荐阅读