2012-12-01 4 views
3

모든 유형의 매개 변수를 받아 들여야하는 함수가 있습니다. 따라서 템플릿을 사용합니다.Void를 함수 매개 변수로 전달

template <typename T> 
void Function(T Parameter); 

함수는 함수를 호출하는 것입니다. 내 실제 응용 프로그램에서 문자열 키가있는 콜백 맵이 있지만이 질문에는 중요하지 않습니다. 콜백은 반환 유형이 void이고 매개 변수 유형이있는 함수 포인터 여야합니다.

void* Callback; 

template <typename T> 
void Function(T Parameter) 
{ 
    (function<void(T))Callback(Parameter); 
} 

콜백이 올바른 유형이라고 가정하면 다음과 같이 작동합니다.

Function<int>(42); 

// should result in... 
(function<void(int))Callback(42); 

그러나 어떤 경우에는 void을 매개 변수로 전달하고 싶습니다.

Function<void>(void); 

// should result in... 
(function<void(void)>Callback(void); 

여기서 알 수 있듯이 매개 변수로는 아무 것도 입력하지 않아도됩니다. void. 그러나 인수로 void을 전달할 수 없기 때문에 typename이 틀릴 것이라는 오류가 있습니다.

void을 함수 인수로 전달할 수 있습니까?

+1

아마도 '부스트'가있을 것입니다. 그러나 'function '을 작성했다면 어떻게 될까요? –

+0

'template void Function (Args ...)'와 같은 가변 템플릿이 있어야합니다. 며칠 전에이 문제에 관해 논의했습니다. 주위를 검색하십시오. –

+0

템플릿 전문화 작업과 비슷합니다. 불행히도 클래스 외 기능 – SomeWittyUsername

답변

8

왜 템플릿이 아닌 과부하를 지정하지 않으십니까?

void* Callback; 

template <typename T> 
void Function(T Parameter) 
{ 
    (function<void(T)>)Callback(Parameter); 
} 

void Function() 
{ 
    (function<void()>)Callback(); 
} 
+0

왜 내가 그 아이디어를 얻지 못했습니까? 고마워, 친구! – danijar