2010-08-13 47 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