2013-08-13 2 views
3

제목 거의 모든 것을 말합니다!C++ 멤버 함수에 typedef 템플릿을 갖는 방법은 무엇입니까?

이 작업을 수행하는 데 사용할 수있는 예쁜/간단한 방법이 있습니까? 함수 포인터는 멤버 함수를 가리킬 수 없으며 멤버 함수는 멤버가 속한 클래스를 알아야하지만이 경우에는 함수가 제공하는 클래스가 다를 수 있으므로 이러한 정보는 없습니다. 표준 라이브러리 만하십시오!

template <class T> 
struct method_ptr 
{ 
    typedef void (T::*Function)(Parameters p); 
}; 

class A 
{ 
public: 
    void foobar(Parameters); 
}; 


// ... 
method_ptr<A>::Function pfoobar = &A::foobar; 
+1

솔루션의 단계에서 해결해야 할 문제는 무엇입니까? 더 좋은 방법이있을 수 있습니다. – GManNickG

답변

5

이 같은 구조체에 포장 시도 할 수

template <typename T> 
using Function = void (T::*)(Parameters p); 

이제 흥미로운 질문 이것이 해결책이 될 수있는 문제는 무엇입니까?

+1

@ xorguy 그것은 종속적 인 이름이 될 수있는 템플릿 컨텍스트에서 사용하는지 여부에 따라 다릅니다. 정규 함수처럼 템플릿이 아닌 컨텍스트에서 사용하면 'typename'없이도 작동합니다. – greatwolf

+0

고마워, 방금 해봤지만이 솔루션에 문제가 발생했습니다. 나는 그것에 대한 또 다른 질문을 만들 것이다! – optional

3

은 테스트되지 않은, 그러나 이것은 C++ 11 컴파일러와 함께 작동합니다 :

template <class A> 
typedef void (A::*Function)(Parameters p);