我尝试了下一个代码:
class JustClass
{
public:
void JustFunc()
{
std::thread t(this->JustThread);
t.detach();
}
void JustThread()
{
}
private:
};
它不应该做任何问题。我只是调用我的对象的函数来像一个线程。 但我得到了下一个错误:
但如果我这样做:
class JustClass
{
public:
void JustFunc()
{
std::thread t(this->JustThread, 5);
t.detach();
}
void JustThread(int just_var)
{
}
private:
};
然后我得到了这个Eroor:
Error 2 error C3867: 'JustClass::JustThread': function call missing argument list; use '&JustClass::JustThread' to create a pointer to member c:\users\micha\onedrive\מסמכים\visual studio 2013\projects\project2\project2\source.cpp 58 1 Project2
为什么这种奇怪的行为?
答案 0 :(得分:2)
您传递成员函数指针,如下所示:
class JustClass
{
public:
void JustFunc()
{
std::thread t(&JustClass::JustThread, this);
t.detach();
}
void JustThread() {}
private:
};
第二种变体:
class JustClass
{
public:
void JustFunc()
{
std::thread t(&JustClass::JustThread, this, 5);
t.detach();
}
void JustThread(int just_var){}
如果函数过载,则需要选择哪个过载。请参阅Jonathan Wakely's Answer相关问题。另请阅读this FAQ关于成员函数的指针。