2010-09-08 52 views

回答

5

非静态成员变量有一个隐含的this参数由编译器内部传递。

你有

ClassInQuestion { 
    void threadFunc(int); 
} 

和编译器在内部创建了一个函数

void ClassInQuestion_threadFunc(ClassInQuestion* thisObject, int); 

所以除非线程程序接受一个指针TA功能有ClassInQuestion*类型的第一个参数将不匹配预期的功能签名。

+1

问题显示为“静态*或*成员函数”。 – 2010-09-08 14:34:31

+0

我也看错的问题,但对于MFC,即需要以下显示游离的或静态成员函数:http://www.go4expert.com/forums/showthread.php?t=3197和用于并行线程(C-API ),这似乎很明显,所以我猜这个问题有点草率。 – stefaanv 2010-09-08 15:21:10

2

主要是因为非静态成员函数有一个隐式参数,很难填入函数指针。我想,当指定一个非静态成员函数时,你也会期望该对象是已知的,这与函数的其他功能是不同的。

1

通常,线程过程必须由具有回调机制的线程库中的预定义函数调用。为了能够调用成员函数(不是静态的),你需要一个类的对象来调用该函数。然而,没有一个可用的线程库支持这个,即它们不接受将被用来调用注册函数的对象。所以所有这些功能都应该是静态的并且适当地进行类型化。

相关问题