2013-10-08 75 views
0

我想將模板函數傳遞給另一個需要typedef參數的函數。將模板函數傳遞給另一個採用typedef參數的函數

例如,我有功能

在header.h

template<typename A, typename B> 
class header: public baseHeader<A, B>{ 
public: 
    typedef void (* funcPointer)(void); 
    // and more... 
} 

在source.cxx

template<typename A, typename B> 
void dosomething(void *arg){ 
    // code here 
} 

void processDoSomething(funcPointer F){ 
    // code here 
} 

template<typename A, typename B> 
void work(){ 
    processDoSomething(dosomething); 
} 

很抱歉的代碼是非常凌亂,但我試圖要做的是將模板函數傳遞給另一個接受typedef參數的函數。我在processDoSomething(dosomething)處得到「未解析的重載函數類型」錯誤,並說它與typdef參數不匹配。

我對模板功能沒有太多經驗,所以我不確定是什麼錯誤。 有人可以幫我嗎?

+0

funcPointer是在頭文件類中定義的,所以你需要在你的processDoSomething函數中加上前綴。因爲它不依賴於模板論證,所以你可以在類之外移動typedef嗎? –

+0

是的,我可以,但是你的意思是什麼? – js0823

+0

'header :: funcPointer F' or something –

回答

1

你已經定義了一個接受void參數的函數指針,但你的dosomething有一個void*參數。 此外我認爲你必須聲明你的processDoSomething功能是這樣的:

void processDoSomething(header<someType, someType>::funcPointer F){ 
    // code here 
} 

編輯: 也因爲你的dosomething是你必須使用它喜歡的模板:(我不知道,對不起,我不能測試它現在用代碼)

processDoSomething(&dosomething<someType, someType>); 
相關問題