C++ Template Metaprogramming을 통해 읽었으며 그 안에 포함 된 연습 문제를 해결했습니다. 문제의 핵심은이 작은 예제에서 볼 수 있습니다.C++ 휴식 템플릿 전문화 모호성
template <class A, class B>
struct C;
template <class A>
struct C<A,A>
{
typedef some_type type;
};
template <class A, class B>
struct C<A*,B>
{
typedef some_other_type type;
};
int main()
{
C<int*,int*> c;
}
c 유형이 모호하기 때문에 컴파일에 실패합니다. 컴파일러는 인스턴스화해야하는 전문 분야를 알 수 없습니다. 그러나 이와 같은 경우에는 첫 번째 전문화를 호출해야합니다. 내가 지금까지 함께 왔어요 솔루션은처럼 다시 작성하는 것입니다이
template <class A, class B>
struct C;
template <class A, class B>
struct C<A*,B>
{
typedef typename boost::mpl::if_c<boost::is_same<A*,B>::value,
some_type, some_other_type>::type type;
};
이 솔루션의 문제는 실제로 포인터, const를 참조와 배열 유형의 각 부분 전문화, 그래서 내가 '이다 이 수표를 각 전문 분야에 개별적으로 추가해야했습니다.
내 질문은, 다음, 이전의 좋은 소형 전문을 가지고 어떻게 든 컴파일러의 경우 전문화를 대신 다른 전문의의
template <class A>
struct C<A,A>
{
typedef some_type type;
};
를 인스턴스화 있도록 조정할 수있는 몇 가지 방법이있다 모호? 관심이있는 사람들을 위해
내가 일하고 있어요 문제는 제 2 장 질문 1
가장 먼저 떠오르는 것은 SFINAE를 사용하여 두 인수가 모두 같을 때 원하지 않는 특수화를 사용하지 않도록 설정하는 것입니다. –