【问题标题】:How can I pass function pointer of a non static member function in a static member function in another class如何在另一个类的静态成员函数中传递非静态成员函数的函数指针
【发布时间】:2020-11-23 18:30:27
【问题描述】:
class A{
static void callback(void(*fun)());

};


class B{
void f1();
}


int main{
B b;
A::callback(b.f1);
return 0'
}

如果 f1 是非静态成员函数,我将在编译时遇到以下错误

no known conversion for argument 1 from â <unresolved overloaded function type> â to â void (*)

如何在不将 f1 设为静态的情况下解决此问题

请帮帮我

【问题讨论】:

  • 如果你展示几行代码来说明你的意思会更清楚。
  • 感觉还有个问题……你为什么要关心那个地址?
  • 如果不做出一些的妥协,就无法解决这个问题,因为你真正要求的东西是不可能的。哪种妥协适合您取决于具体情况。因此,如果您需要一些必须参与的帮助,请描述您实际想要实现的目标。
  • 这能回答你的问题吗? Setting a pointer to a non-static member function。另请参阅 Obtaining a function pointer to a non static member function 了解使用 lambda 表达式和 std::function 而不是函数指针的不太过时的解决方案。

标签: c++ static


【解决方案1】:

静态方法

一个类的所有非模板成员函数都有一个地址,不管它们是通过哪个类的实例来访问的。

静态类函数的特殊之处在于它们不会传递this 指针,因此可以在没有类实例的情况下调用它们,而是通过类名本身(即class::fn)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    相关资源
    最近更新 更多