2013-10-08 77 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>); 
相关问题