2010-08-13 66 views
3

通常说回调是用函数指针实现的。当我检查PortAudio的源代码时,我发现回调函数被声明为普通函数(而不是f指针)。这是正常的/合法的/可取的吗?没有函数指针的回调

typedef int PaStreamCallback(
const void *input, void *output, 
unsigned long frameCount, 
const PaStreamCallbackTimeInfo* timeInfo, 
PaStreamCallbackFlags statusFlags, 
void *userData); 

回答

4

它只要是细作为参数被用作PaStreamCallback*(这是一个指针功能),像

PaError Pa_OpenStream (
     PaStream **  stream, 
     const PaStreamParameters *  inputParameters, 
     const PaStreamParameters *  outputParameters, 
     double  sampleRate, 
     unsigned long framesPerBuffer, 
     PaStreamFlags streamFlags, 
     PaStreamCallback *  streamCallback, // <--- 
     void *  userData  
    ) 
+0

确定,感谢。 顺便说一下,函数只传递给Pa_OpenStream,但是逻辑上必须和addressof运算符一起传递,但省略&是一个快捷方式,对吗? – 2010-08-13 08:19:38

+3

@paul if'foo'是一个函数,'foo'和'&foo'是等价的。 – kennytm 2010-08-13 08:20:12