将成员函数指定为其他函数

assigning member function to be other function

本文关键字:函数 其他 成员      更新时间:2023-10-16

函数是否可以被赋值或更改其定义,就像用派生类重写函数一样。

但此时,它已经超出了类的范围。

我的意思是:

//class.h
class MClass
{
public:
  void function(); // this is the function I am referring to.
}
//class.cpp
void MClass::function() { }
//file1.cpp
MClass mclass;

void globalFunction() { }
mclass.function = globalFunction; //is this even possible?

您的function()是一个实函数,您需要function Callback

参见示例程序:在ideone 上

#include <functional>
class MClass
{
public:
  std::function<void(void)> func_ptr;
  void setFuncPtr(const std::function<void(void)>& ptr)
  {
    func_ptr = ptr;
  }
  void callFuncPtr()
  {
    func_ptr();
  }
};

您可以将func_ptr设置为任何可调用对象

MClass m;
m.setFuncPtr(globalFunction);   // set to standalone function
m.callFuncPtr();
// set lambda to it
m.setFuncPtr([](){ std::cout << " do something " << std::endl; });
m.callFuncPtr();

或绑定到其他对象

 struct Test
 {
   void print() { std::cout << "Test::print" << std::endl; }
 };
Test t;
m.setFuncPtr(std::bind(&Test::print, t));
m.callFuncPtr();

您还可以使用std::bind和占位符将参数传递给函数。

有两种方法:

  • c++03-您可以使用函数指针:

    class MClass
    {
    public:
      void (*function)();
    };
    void globalFunction()
    {
      // ...
    }
    MClass obj;
    mclass.function = globalFunction;
    
  • 在c++11中,您可以使用函数:

    class MClass
    {
    public:
      std::function<void()> function;
    };
    void globalFunction()
    {
      // ...
    }
    MClass obj;
    mclass.function = globalFunction;
    
相关文章: