C++ Can';t启动C++;std::以可调用为参数的线程
我希望在程序中设置以下类:C++ Can';t启动C++;std::以可调用为参数的线程,c++,multithreading,templates,C++,Multithreading,Templates,我希望在程序中设置以下类: 实现缓冲区的类。此缓冲区满时,将生成一个线程,该线程进行回调以处理如何处理满缓冲区 包含缓冲区对象的类。实现回调函数 我在生成运行回调的std::线程时遇到了一些问题。看起来我把它的参数弄错了,但我搞不清楚 最小可复制示例: #include <thread> class MyClass; class CallbackClass { public: void (MyClass::*callback)();
- 实现缓冲区的类。此缓冲区满时,将生成一个线程,该线程进行回调以处理如何处理满缓冲区
- 包含缓冲区对象的类。实现回调函数
#include <thread>
class MyClass;
class CallbackClass
{
public:
void (MyClass::*callback)();
std::thread a_thread;
void setCallback(void (MyClass::*cb)())
{
callback = cb;
}
void writeCall()
{
a_thread = std::thread(callback); // error here
}
};
class MyClass
{
public:
CallbackClass callbackobject;
MyClass()
{
callbackobject.setCallback(&MyClass::bufferWriter);
}
void bufferWriter(){}
};
int main(){}
这是指向类方法的指针
a_thread = std::thread(callback);
类方法不是一个可以自己调用的函数。类方法需要为其调用的对象。您需要从某处存储或获取指向MyClass
对象的指针。例如,您可以将第二个参数传递给`setCallback:
void setCallback(void (MyClass::*cb)(), MyClass *ptr)
然后把它藏在某个地方,然后用它来调用类方法。通常,这类似于:
a_thread = std::thread(callback, ptr);
这是指向类方法的指针
a_thread = std::thread(callback);
类方法不是一个可以自己调用的函数。类方法需要为其调用的对象。您需要从某处存储或获取指向MyClass
对象的指针。例如,您可以将第二个参数传递给`setCallback:
void setCallback(void (MyClass::*cb)(), MyClass *ptr)
然后把它藏在某个地方,然后用它来调用类方法。通常,这类似于:
a_thread = std::thread(callback, ptr);
此错误是否附加到任何特定代码行?“回调”不是可调用对象。“回调”是一个类方法。您如何期望
std::thread
知道要调用哪个对象的回调方法?那是你的问题<代码>回调需要一个基
对象,它将调用该对象的方法。我已经突出显示了一点,以供将来查看。无关:此代码生成大量警告。有些可能很重要,例如“类基”具有虚拟函数和可访问的非虚拟析构函数。编译时,您应该打开更多警告,并尝试修复所有警告。我认为唯一的一点是,复制此问题不需要关键字template
。此错误是否附加到任何特定代码行?“回调”不是可调用的对象。“回调”是一个类方法。您如何期望std::thread
知道要调用哪个对象的回调方法?那是你的问题<代码>回调
需要一个基
对象,它将调用该对象的方法。我已经突出显示了一点,以供将来查看。无关:此代码生成大量警告。有些可能很重要,例如“类基”具有虚拟函数和可访问的非虚拟析构函数。编译时应该打开更多警告,并尝试修复所有警告。我认为唯一的一点是,复制此问题不需要关键字template
。