线程函数参数的前向声明不起作用
forward declaration for thread function argument is not working
我正在尝试为 class 编写一个示例程序,它将执行 RAII 并使用自身 this 指针调用线程。但是线程函数参数的数据类型被声明为前面的前向声明。
请查看示例程序 -
#include <iostream>
#include <thread>
using namespace std;
class test; // **forward declaration**
void thfunc (test *p) {
cout << p->value << endl;
return;
}
class test {
public:
int value;
thread t1;
test () {
value = 100;
t1 = thread(thfunc, this);
}
~test() {
t1.join();
}
};
int main () {
test * p = new test;
delete p;
return 0;
}
这是一个编译错误 -
fwd.cpp: In function 'void thfunc(test*)':
fwd.cpp:9:11: error: invalid use of incomplete type 'class test'
fwd.cpp:6:7: error: forward declaration of 'class test'
为了解决这个问题,我将线程函数设为 class -
的静态成员函数
class test {
public:
int value;
thread t1;
test () {
value = 100;
t1 = thread(thfunc, this);
}
~test() {
t1.join();
cout << "Dtor" << endl;
}
**static** void thfunc (test *p) {
cout << p->value << endl;
return;
}
};
这是正确的修复吗?我想将线程函数作为单独的库,但现在我必须将它们作为 class 的一部分。请建议。任何形式的 help/pointer/suggestions 将不胜感激。
使 thfunc
成为静态成员是正确的,因为它会起作用。如果你出于某种原因(有时有很好的理由)想要将它们分开,那么你仍然可以这样做。
这个函数只能在作为参数传递给std::thread
之前声明:
#include <iostream>
#include <thread>
using namespace std;
void thfunc (class test *p);
class test {
public:
int value;
thread t1;
test () {
value = 100;
t1 = thread(thfunc, this);
}
~test() {
t1.join();
}
};
void thfunc (test *p) {
cout << p->value << endl;
return;
}
int main () {
test * p = new test;
delete p;
return 0;
}
我正在尝试为 class 编写一个示例程序,它将执行 RAII 并使用自身 this 指针调用线程。但是线程函数参数的数据类型被声明为前面的前向声明。 请查看示例程序 -
#include <iostream>
#include <thread>
using namespace std;
class test; // **forward declaration**
void thfunc (test *p) {
cout << p->value << endl;
return;
}
class test {
public:
int value;
thread t1;
test () {
value = 100;
t1 = thread(thfunc, this);
}
~test() {
t1.join();
}
};
int main () {
test * p = new test;
delete p;
return 0;
}
这是一个编译错误 -
fwd.cpp: In function 'void thfunc(test*)':
fwd.cpp:9:11: error: invalid use of incomplete type 'class test'
fwd.cpp:6:7: error: forward declaration of 'class test'
为了解决这个问题,我将线程函数设为 class -
的静态成员函数class test {
public:
int value;
thread t1;
test () {
value = 100;
t1 = thread(thfunc, this);
}
~test() {
t1.join();
cout << "Dtor" << endl;
}
**static** void thfunc (test *p) {
cout << p->value << endl;
return;
}
};
这是正确的修复吗?我想将线程函数作为单独的库,但现在我必须将它们作为 class 的一部分。请建议。任何形式的 help/pointer/suggestions 将不胜感激。
使 thfunc
成为静态成员是正确的,因为它会起作用。如果你出于某种原因(有时有很好的理由)想要将它们分开,那么你仍然可以这样做。
这个函数只能在作为参数传递给std::thread
之前声明:
#include <iostream>
#include <thread>
using namespace std;
void thfunc (class test *p);
class test {
public:
int value;
thread t1;
test () {
value = 100;
t1 = thread(thfunc, this);
}
~test() {
t1.join();
}
};
void thfunc (test *p) {
cout << p->value << endl;
return;
}
int main () {
test * p = new test;
delete p;
return 0;
}