2012-01-21 2 views
1

기본적으로 T_function에 어떤 매개 변수와 함께 function_A를 전달하여 T_function이 일부 명령을 실행하고 전달 된 함수를 호출 할 수있게하고 싶습니다.C++ : 하나의 매개 변수로 모든 함수를 허용하는 템플릿?

이것은 내가 생각해 낸 것입니다 내 목표를 더 명확하게 만들 수 있습니다.) :

위의 코드는 훌륭하지만 잘 작동하지 않습니다. 나는 또한 그것이 어리 석다는 것을 확신 할 수 없다. 좀 더 많은 이해를 가진 사람이 개선이 있습니까? 나는 이것을 온라인으로 보려고했지만 검색하기가 어려웠다.

답변

4

전체 함수 유형을 템플릿 매개 변수로 만들 수 있습니다. 그런 다음 컴파일러는 입력 인수를 사용하여 템플릿 매개 변수를 추론 할 수 있습니다.

template <typename F, typename T> 
void foo (F func, const T& p) 
{ 
    // do code 
    func(p); 
} 

foo(&someFunc, someInt); 

이것은 또한 함수 개체를 지원할 수 있다는 이점이 있습니다. (이것은 표준 라이브러리 ("STL")이 알고리즘에 함수를 넘겨주는 것을 지원하는 방법이기도합니다.)

+0

함수 템플릿을 호출 할 때'& someFunc' 대신'someFunc'도 괜찮습니다. – Nawaz

+0

고마워요! 나는 그것이 당신이 F로 비 함수를 사용하는 것을 막을 것이라는 것을 깨닫지 못했습니다. – Rakosman

+0

실제로,'F'가'operator()'를 오버로드하는 한, 실제로는'func'로 비 함수를 전달할 수 있습니다. 이것은 아마도 원하는 동작 일 것입니다. –

관련 문제