2011-09-04 2 views
0

어떻게 부울을 돌려주는 함수를 가리키는 함수 ptr을 정의하겠습니까? 그러나 알 수없는 (그러나 같은) 두 가지 타입을 인수로 취합니까?함수는 함수 ptr에 템플릿 인자를 가지고 있습니다.

은 다음과 같이해야하지만, 내 IDE 자국이 같은 잘못은 :

template<class arg>
bool (ptr*)(arg,arg);

나는 또한 얻는다 두 개의 인수를 비교하는 등의 기능-PTR을 취하는 기능이 결합하려는.

좋아 :

template<class arg>
void function(arg one,arg two,ptr comparefunction)

뭔가 이런 식으로도 가능합니까?

+0

가능한 중복 : http://stackoverflow.com/ 질문/7293640/function-as-a-template/7293669 # 7293669 –

+2

나는 당신의 철자를 인정합니다. 그러나 당신은 'kombine'의 철자에 대해 그것에 대해 일치해야합니다. (awwland awoodland) 그것을 파멸 시켰습니다. –

+0

그것은 kool 밴드 이름을 만들 것입니다. 아 잠깐, 밴드 이름입니다. –

답변

2

처음에 묻는 것 같은 템플릿 typedef를 사용할 수 없습니다. 함수 포인터를 사용하는 함수의 경우 다음을 수행 할 수 있습니다.

template<class arg> 
void function(arg one,arg two,bool (*comparefunction)(arg,arg)) 

대신에.

귀하의 초기 구문은 잘못된 것입니다 : 당신이하고 싶은 것은이 방법으로 가능하다

bool (*ptr)(arg,arg); // * goes before the name 
2

:

template<class TArg> 
void function(TArg one, TArg two, bool (*compare)(TArg, TArg)) 
{ 
} 
1

:

template<class TArg> 
struct funptr 
{ 
    typedef bool (type*)(TArg, TArg); 
}; 

template<class TArg> 
void function(TArg one,TArg two,typename funptr<TArg>::type compare) 
{ 
} 

또는 단순히 이렇게 다른 질문과 마찬가지로 struct :

을 사용해야합니다.3210
template<typename T> 
struct Function { 
    typedef bool (*Ptr)(T, T); 
}; 

그리고 다음과 같이 사용할 수 있습니다 : 두 번째에 관해서는

Function<int>::Ptr f = &myfunction; 

, 당신은이 작업을 수행 할 수 있습니다

template<class T> 
void function(T one, T two, typename Function<T>::Ptr comparefunction) 
관련 문제