나는 C++ 템플릿 수수께끼를 발견했습니다. 나는 그것을 최소한으로 줄이려고 노력했다. 그리고 지금 내가하려고하는 것이 가능하다해도 나는 확신 할 수 없다. 다음 코드를 살펴보십시오 (일부 .h 파일에서).템플릿 Conundrum
//This one works:
A<B1> first;
first.f<int>(5);
//This one does not work:
A<B2<int>> second;
second.f<int>(5);
나는 때문에 두 번째 부분의 얻을 오류 메시지가
error C3860: template argument list following class
template name must list parameters in the
order used in template parameter list
error C3855: 'A<T>': template parameter 'T' is
incompatible with the declaration
문제가 어떤 생각입니다 : 내 main
기능에
template<typename T>
class A
{
public:
template<typename S>
void f(S x);
};
class B1 { };
template<typename S>
class B2 { };
//This one works:
template<>
template<typename S>
void A<B1>::f(S x)
{
}
//This one does not work:
template<>
template<typename S>
void A<B2<S>>::f(S x)
{
}
나는 이런 일이?
편집
여기 내 동기 부여의 문제가보다 구체적인 확인하십시오. 위의 함수 f
이 T=std::tuple<T1, T2>
, T=std::tuple<T1, T2, T3>
및 T=std::tuple<T1, T2, T3, T4>
에 대해 특수화되어 있고 tuple
의 유형은 아직 언 바인딩되어 있어야합니다. 템플릿에 다른 템플릿을 전달하려는 경우
무엇을하려고합니까? 아마 더 좋은 방법이있을 것입니다. – Pubby
이것이 원하는 것입니까? http://stacked-crooked.com/view?id=8b9365eab6441615b312ad76b0500bb7-18aa934a8d82d638dde2147aa94cac94 – Pubby
@Pubby 동기 부여가있는 섹션을 마지막에 추가했습니다. –