함수 포인터를 사용하는 템플릿 함수를 만드는 중입니다. 구문을 좀더 단순화하려고하고 있지만 말입니다.함수 포인터 인수에 대한 자동 리턴 유형?
지금까지 내가 좋아하는 뭔가가 있습니다, 말썽이
template< typename obj, typename ret, typename... args >
auto py_wrapped_func(ret (obj::*f)(args...))
{
// Do some stuff with the function pointer.
}
, 때로는 반환 형식, RET 긴 미쳤다. "함수 프로토 타입에서 허용되지 않습니다 decltype (자동)"- 분명히
template< typename obj, typename... args >
auto py_wrapped_func(decltype(auto) (obj::*f)(args...))
{
// Do some stuff with the function pointer.
}
이 컴파일되지 않습니다 : 같은이를 단순화 할 수있는 방법이 있는지 궁금하네요. 이 문제를 해결할 더 좋은 방법이 있습니까?
나는 함수 유형에 직접 템플릿을 사용할 수 있다는 것을 알고 있지만, 템플릿을 사용할 때 또는 decltype(&obj::func)
을 사용할 때 템플릿 함수 유형을 작성하지 않아도되는 것을 선호합니다. 어쨌든 템플릿에 명시 적으로 나타 내기 위해 템플릿 매개 변수로 args
인수가 필요합니다.
필자는 컴파일러가 함수 포인터 유형과 객체 및 일부 인수를 명시 적으로 알 필요가 있다고 생각합니다. 너무 많이 묻는거야? 내가 어쩌면?
왜 반환 유형 얼마나 오래 상관 없어? 표시된 코드에서 아무 것도 입력하지 않아도됩니다. 해결해야 할 실제 문제의 예를 보여주십시오. –
분명히 템플릿을 사용할 때 반환 유형을 지정해야합니다. 내 시나리오에서 나는 std :: vector, GetArraySize() >>와'그 함수 템플릿에 포함 된 쓰레기처럼 보인다. 이것은 코드 가독성에 도움이되지 않습니다. 실제 문제입니다. –
Matt
왜 템플릿을 사용할 때 반환 유형을 지정해야한다고 생각하십니까? 템플릿 매개 변수 공제가 어떤면에서 효과가 없습니까? 다시 말하지만, 긴 유형의 철자를 사용해야한다고 생각하는 예를 보여줍니다. –