함수 포인터를 템플릿으로 쓰는 방법은 무엇입니까? 해당 함수에 대한 유형을 생성 의미하는 경우함수 포인터를 템플릿으로 사용
template <typename T>
T (*PtrToFunction)(T a);
함수 포인터를 템플릿으로 쓰는 방법은 무엇입니까? 해당 함수에 대한 유형을 생성 의미하는 경우함수 포인터를 템플릿으로 사용
template <typename T>
T (*PtrToFunction)(T a);
, 당신이 이런 식으로 뭔가를 할 수 :
template<typename T>
struct Function {
typedef T (*Ptr)(T);
};
을 그리고 난 당신이 선언하려고하는 가정입니다
int blah(Function<int>::Ptr a) { }
처럼 사용 유형 (구체적인 유형없이 "템플릿 변수"를 선언 할 수 없습니다).
C++ 03, 당신이 해결 방법으로 구조체를 사용할 필요가 템플릿 형식 정의를 가지고 있지 않습니다
template <typename T>
struct FuncPtr {
typedef T (*Type)(T a);
};
...
// Use template directly
FuncPtr<int>::Type intf;
// Hide behind a typedef
typedef FuncPtr<double>::Type DoubleFn;
DoubleFn doublef;
C++ (11) 템플릿 별칭이 구조체의 해결 방법을 제거되지만를 Clang 제외하고는 현재 어떤 컴파일러 없다 이것을 실제로 구현하십시오.
template <typename T>
typedef T (*FuncPtr)(T a);
// Use template directly
FuncPtr<int> intf;
// Hide behind a typedef
typedef FuncPtr<double> DoubleFn;
DoubleFn doublef;
GCC 4.7에서 GCC가 이제 템플릿 별칭을 지원한다는 점을 언급하기 위해이 오래된 항목을 업데이트하십시오. –
당신은 그렇게 할 수 없습니다. 구체적인 유형의 함수 포인터 만 작성할 수 있습니다.
은 비주얼 스튜디오 2015 괜찮아요와 GCC에 존재하지 않는 "템플릿 형식 정의"에이를 것이다 명령 행 옵션 -std=c++11
template<class T> using fpMember = void (T::*)();
를 사용해야합니다. C++ 11에서는 템플리트 별칭을 가지고 있지만 그 상황을 다룰 지 확신 할 수 없습니다. –
응용 프로그램의 크기가 보증하는 경우 [Boost.Function] (http://www.boost.org/doc/libs/1_47_0/doc/html/function.html)과 같은 좀 더 일반적인 펑터 객체를 사용하면 어떤 종류의 호출 가능한 객체가 아니라 함수 포인터. 작은 응용 프로그램을 작성하는 경우 귀찮게하지 마십시오. –