2013-10-08 4 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. Я получаю ошибку «unregolved overloaded function type» в processDoSomething (dosomething), говоря, что она не соответствует аргументу typdef.

У меня нет большого опыта работы с шаблонами, поэтому я не уверен, что не так. Может кто-нибудь мне помочь?

+0

funcPointer определен в классе заголовка, поэтому вам нужно придать ему что-то в вашей функции processDoSomething. Поскольку это не зависит от шаблонных аргументов, можете ли вы переместить typedef вне класса? –

+0

Да, я могу, но что вы подразумеваете под префиксом что-то? – js0823

+0

'header :: funcPointer F' или что-то –

ответ

1

Вы определили указатель на функцию, который принимает аргумент void, но ваш dosomething имеет аргумент void*. также я думаю, что вы должны объявить processDoSomething функцию следующим образом:

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

Edit: также потому, что ваш dosomething является шаблон вы должны использовать его как: (Я не уверен, простите меня, я не могу проверить он с кодом сейчас)

processDoSomething(&dosomething<someType, someType>); 
Смежные вопросы