我试图使用以下内容:使用成员函数在pthread(Linux)的
在pthread_create(& searchThread [I],& threadAttribs [I],DoStuff,& ParallelParams [I]);
如果DoStuff是静态的,它会编译,但是我没有访问DoStuff所在的类的一部分的任何方法或变量。但是,如果我保持DoStuff作为非静态方法,以便我可以访问一切在课堂上,我得到以下编译器错误:
错误:类型“无效*(MyClass的::)(无效*)”的说法不符合“无效*()(无效)”
其中错误似乎指的是DoStuff参数以及它是成员函数的事实。
是否有任何希望能够通过非静态方法允许我在我的DoStuff方法中访问MyClass中的所有内容?
谢谢!
从技术上讲,这是无效的,因为传递给'pthread_create'的函数指针必须是'extern“C”',而静态成员函数不是......但它适用于GCC(和其他编译器)一个[bug /特性](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2316)无法区分'extern“C”'和'extern“C++”'函数。 –
@JonathanWakely我认为在GCC和其他编译器的情况下,它会在编译时将pthread_create调用中的函数名称转换为函数指针。但是你列出的错误报告称这种观点存在问题。你知道一些编译器中的函数指针是在编译时转换还是在运行时处理? –
@ZacharyKraus,我不确定你的意思。函数指针是在编译时处理的,但我不明白在这里或链接的错误报告中是如何相关的。 C++标准说,extern C函数与extern C++函数是不同的类型,这是编译时的类型系统的静态属性。我不知道你在想什么运行时间处理。 –