2011-11-14 2 views
0

템플릿 함수의 인수로 typedef를 사용하는 방법이 있습니까? 또는 형식을 인수로 정의하는 방법은 무엇입니까?템플릿 함수 기수에 typedef를 사용할 수 있습니까?

의 내가이 함수에 함수 포인터를 전달하려는 가정 해 봅시다 :

template<typename C, typename ...Args> 
void test(typedef void (C::*functor)(Args... args) functor f) 
{ 
    f(args...); 
} 
+0

Nitpick을 : 당신의 목표는 함수 본문에있는 매개 변수의 유형을 반복하지 않도록하는 경우, 당신은 decltype을 사용할 수 있습니다 . (흥미로운 관련 읽기 : https://blogs.msdn.com/themes/blogs/generic/post.aspx?WeblogApp=oldnewthing&y=2004&m=02&d=09&WeblogPostID=70002&GroupKeys=) –

답변

3

아니요 매개 변수에 typedef을 만들 수 없습니다. 나는 그것이 혼란 알지만, 멤버 함수에 대한 포인터는 함수 포인터도 포인터도 아니다 :

template<typename C, typename ...Args> 
void test(void (C::*f)(Args...)) 
{ 
    typedef decltype(f) functor; 
} 
+0

확인, 알겠습니다, 고마워요. – codablank1

0

번호

그런데 왜 당신은 심지어 당신이 쓸 수있는 때 원하는 것 :

template<typename C, typename ...Args> 
void test(void (C::*f)(Args...), Args... args) 
{ 
    C c; //f is a member function, so need an instance of class 
    (c.*f)(args...); //call the function using the instance. 
} 

을 또는 인수를 사용하여 인스턴스를 전달하거나 다른 작업을 수행 할 수 있습니다. 나는 이것이 개념 증명 일 뿐이며 실제 코드에서는 뭔가 다른 것이라고 생각합니다.

관련 문제