c++ - 将成员函数分配给其他函数

标签 c++ visual-c++ c++11

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

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

我的意思是这样的:

//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 来代替。

参见示例程序:on 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 设置为任何 callabe objet

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();

或者绑定(bind)到其他对象

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

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

关于c++ - 将成员函数分配给其他函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893855/

相关文章:

multithreading - 保存 fprintf 调用的变量参数列表

c++ - 有什么好的方法可以控制手动缩进线之后的线吗?

c++ - 仅使用 1 行 C++ 初始化二维 vector

c++ - 当调用包含的对象函数时,std::Optional 是否转发右值?

c++ - C++ 单元测试工具的建议

c++ - 正确答案但在效率阶段出现运行时错误

c++ - __attribute__((__packed__)); 之间有什么区别?和#pragma pack(1)

c++ - visual c++ 2008 发布问题

c++ - 函数没有 volatile。怎么修?

c++ - 在 vector 的 vector 中找到 Point3f 的最大值