2012-07-30 4 views
1

한동안 둘러 보면서 얻을 수 없는데 왜 이것이 이미 표준에 포함되지 않았을까요? void를 돌려주는 함수를 void를 받아들이는 함수에 건네 주겠습니까?

template<class T> accept_all(T) {} 
void give_void() {} 
int give_int() { return 1;} 

int main() { 
accept_all(give_void()); 
accept_all(give_int()); 
} 

이것은 템플릿 클래스 전문화를 사용하는 번거 로움 꽤 절약 할 수 ... 그리고 일반 구문의 관점에서, 그것은 빈 공간을 반환 할 수 하나를 통과 할 수없는 것으로 약간의 의미가 있습니다.

내가 할 수있는 일은이 것을 호출하기 위해 각 메소드 유형에 대해 추악한 '중재자 클래스'를 전문화하지 않는 것입니까?

감사합니다.

편집 : 어떤 함수 반환 값을 받아들이는 템플릿을 구현하는 좋은 방법은 무엇입니까?

+0

왜 함수 반환 값을 허용하는 함수를 구현하겠습니까? – akappa

+0

문제는'void'는 값이 아니며 전혀 가치가 없다는 것입니다. 'give_void'를 보면, 아무것도 반환하지 않습니다. –

답변

3

정말 이상하게 보입니다. 왜이 함수들을 연속적으로 호출하지 않는지.

give_void(); 
accept_void(); 

훨씬 더 깨끗합니다.

실제로 입력해야 할 기호의 수가 같더라도 실제로는 accept_void(give_void());을 입력하여 아무 것도 저장하지 않습니다.

편집 난 정말 당신이 달성하고자하는 것을 이해하지만, 확실하지 :

template <typename Result, typename Callable> 
static Result func(Callable c) 
{ 
    return c(); 
} 
+0

내 편집을보세요. – ActiveTrayPrntrTagDataStrDrvr

+0

@ user1240436 : 내 편집 참조하십시오 – Andrew

0

C++ 함수 (Is returning void valid code? 참조)에서 return void 당신을 수 있습니다.

그러나 void를 반환하는 것은 void를받는 것과 상당히 다릅니다. int foo(void)int foo() 단지 다른 (그리고 사용되지 않음) 구문이며, 단지

귀하의 제안 함수 호출의 인수가 번호와 동일한 것으로 불변 나누기 C.와의 호환성의 역사적 이유로 존재하는 점에 유의 함수가 받아들이는 인수

+0

표준은 혼란 스럽습니다 (항상 그렇듯이). 무효를 전달하는 것이 결코 '진짜'논증이 아니라면, 나의 인생은 더 단순해질 것이지만, 거짓을 표현하는 구문 적 도구 일 것입니다. 저는 프록시 템플릿 클래스가 템플릿 구문의 확장으로서 무효 인수를 가능하게하는 특별한 경우와 언어를 처리하는 사이에 다소 찢겨졌습니다. – ActiveTrayPrntrTagDataStrDrvr

관련 문제