클래스 템플릿의 인스턴스화에서 템플릿 매개 변수를 추론하는 방법을 알고 있습니다.
template <typename T>
struct foo {};
template <typename T>
struct foo_param;
template <typename T>
struct foo_param< foo<T> > {
using type = T;
};
그러나 함수 템플릿에 대해 똑같이하는 데 실패했습니다. 순진한
template <typename T>
void bar() {}
template <auto F>
struct bar_param;
template <typename T>
struct bar_param< &bar<T> > {
using type = T;
};
실패하다
<source>:21:19: error: template argument '& bar<T>' involves template parameter(s)
21 | struct bar_param< &bar<T> > {
| ^~~~~~~
나는 오류를 이해한다고 생각하지만 (실제로 내가 이해하지 못했지만 다른 질문에 대한 경우 임) 그것을 피하는 방법을 모르겠습니다. 어떻게 추론 예를 들어, 내가 할 수 int
주어진 &bar<int>
?
나는 당신이 원하는 것이 가능하다고 생각하지 않습니다.
최소한 bar<T>
모든 유형에 대해 유형이 동일하기 때문에 함수 유형을 통과하지 않습니다 void
. 인수가없는 반환 함수입니다.
간단한 방법으로 확인할 수 있습니다. static_assert()
static_assert( std::is_same_v<decltype(bar<int>), decltype(bar<long>)> );
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다