2013-05-21 2 views
3

분명히 decltype (foo())를 사용하여 함수의 반환 유형을 얻을 수 있지만 foo가 작동하지 않는 인수를 사용하는 경우 foo에 일부 더미 인수를 전달해야 작동 할 수 있습니다. 그러나 인자를 넘겨주지 않고 함수의 리턴 타입을 얻는 방법이 있습니까?인수를 전달하지 않고 함수의 반환 형식을 가져올 수 있습니까?

+3

반환 유형은 인수 유형 –

+0

에 의존하는 징벌 (*) (인수를 ...) 복용 템플릿 함수에 인수로 함수에 합격하자 컴파일러는 R을 추론합니다. 과부하없이 작동 할 수 있습니다. –

답변

7

(이 경우 당신이 std::result_of 같은 것을 사용한다, 그러나 당신이 그 인수의 유형을 제공 할 것입니다) 인수의 형태에 의존하지 않는 반환 형식을 가정하면, 당신은 간단한 형식을 쓸 수 있습니다 당신이 함수 타입의 리턴 타입을 추론 할 수 있습니다 특성은 :

#include <type_traits> 

template<typename T> 
struct return_type; 

template<typename R, typename... Args> 
struct return_type<R(Args...)> 
{ 
    using type = R; 
}; 

int foo(double, int); 

int main() 
{ 
    using return_of_foo = return_type<decltype(foo)>::type; 
    static_assert(std::is_same<return_of_foo, int>::value, "!"); 
} 
관련 문제