C++ c++;类方法回调,类似于std::thread

C++ c++;类方法回调,类似于std::thread,c++,callback,C++,Callback,使用std::thread,您可以传递一个classes方法作为要调用的函数 语法: std::thread myThread(&MyClass::handler, this); 1.我的函数的语法是什么来模拟这种行为,从而允许将类方法传递给我自己的回调例程 2.如何将此引用存储在变量中 例: 那么 1.我的函数的语法是什么,它模拟这种行为,以便将类方法传递给自己的回调例程 它被称为“指向成员的指针”。看见 您的第二个问题应该由它来回答。获取一个指向MyClass的成员函数指针,该指针

使用std::thread,您可以传递一个classes方法作为要调用的函数

语法:

std::thread myThread(&MyClass::handler, this);
1.我的函数的语法是什么来模拟这种行为,从而允许将类方法传递给我自己的回调例程

2.如何将此引用存储在变量中

例:

那么

1.我的函数的语法是什么,它模拟这种行为,以便将类方法传递给自己的回调例程

它被称为“指向成员的指针”。看见
您的第二个问题应该由它来回答。

获取一个指向
MyClass
的成员函数指针,该指针返回void,并且不带任何附加参数-

void myfunction(void (MyClass::*somefunction)(), MyClass* obj)
{
  (obj->*somefunction)();
}
这里的
void(MyClass::*somefunction)(
意味着
somefunction
是指向
MyClass
的成员函数的指针,它不接受任何附加参数(隐式
MyClass*
作为第一个参数除外)并返回
void
。有关成员函数指针的详细信息,请参阅

要使函数更通用,如
std::thread
请按以下方式声明它- 第一个函数接受任何类型的非成员函数(又称自由函数)

template<class F, class... Args>  
void myfunction(F&& f, Args&&... args)
{
    f(std::forward<Args>(args)...);
}
模板
void myfunction(F&&F、Args和…Args)
{
f(标准:正向(参数)…);
}
第二个取任何类的任何类型的成员函数指针

template <class R, class C, class... Args> 
void myfunction(R(C::*mf)(Args...), C* pc, Args&&... args)
{
    (pc->*mf)(std::forward<Args>(args)...);
}
模板
void myfunction(R(C::*mf)(Args…,C*pc,Args&&…Args)
{
(pc->*mf)(标准:正向(args)…);
}

查看
std::function
@user0042好的,这样看起来就行了。有没有办法把它放到一行中?:使用std::占位符::\u 1;callbacktype f_add_display2=std::bind(&B::callbk,B,_1);s.startListen(f_添加_显示2);见第(3)条
template<class F, class... Args>  
void myfunction(F&& f, Args&&... args)
{
    f(std::forward<Args>(args)...);
}
template <class R, class C, class... Args> 
void myfunction(R(C::*mf)(Args...), C* pc, Args&&... args)
{
    (pc->*mf)(std::forward<Args>(args)...);
}