2014-05-13 3 views
2

템플릿의 일부 매개 변수를 설정하고 템플릿 매개 변수로 나머지를 그대로 둘 수 있습니까? 첫 번째와 동일하지만 더 적은 수의 템플릿 매개 변수로 새 템플릿 클래스를 만드는 것과 같은 것입니다.여러 템플릿 매개 변수의 값 설정

A는 명확하게 설명 할 수 없습니다. 아마도 몇 줄의 코드가 도움이 될 것입니다.

template<int A, typename B> 
class XXX 
{ 
    //Some code 
}; 

template<template<typename> class C> 
class YYY 
{ 
    //Some code 
}; 

template<int D> 
class ZZZ 
{ 
    YYY<XXX<D> > object; //This is wrong. How to do it? 
}; 

이 작업을 수행 할 수있는 메커니즘을 찾을 수 없습니다.

편집 예를 부적절하게 선택했습니다. 클래스 ZZZ가 보일 것 같은 :

template<int D> 
class ZZZ : public YYY<XXX<D> > 
{ 
    //Some code 
}; 

답변

1
template<class T>using WWW=XXX<D,T>; 

또는, 당신이 using 인수를 할 수있는 공간이없는 경우 :

template<int D>struct WW{ 
    template<class T>using W=XXX<D,T>; 
}; 

template<int D> 
class ZZZ : public YYY<WW<D>::template W> 

을 내가 다른 이름을 사용하는 것이 좋습니다.

+0

는 MinGW 인쇄 오류 :'유형을 예상 W'' '얻었다. 키워드'typename '을 추가하면 문제가 해결됩니다. 또한 마지막 줄의'template'은'template argument 1 is invalid'라는 에러를 발생시킵니다. 프로그램은이 키워드없이 작동합니다. –

+0

그럼에도 불구하고 대답하면 문제가 해결됩니다. –

0

Yakk의 대답은 내가 새로운 수업을 정의 할 구조를 만들 수 있다는 것을 깨닫게했다.

template<int E> 
struct SetPrameter 
{ 
    template<typename T> 
    using XXX = XXX<E, T>; 
}; 

내가 이런 식으로 사용할 수 있습니다

template<int D> 
class ZZZ : public YYY<typename SetPrameter<D>::XXX> 
{ 
    //Some code 
}; 
+0

'typename'이 정확하지 않습니다. 의존형을 노출시키지 않으면 종속'template'을 노출하게됩니다. – Yakk

+0

이 코드를 테스트했습니다. 컴파일됩니다. 'Typename'은'SetPrameter :: XXX'는 변수 또는 함수가 아닌 유형임을 컴파일러에 알립니다. 컴파일러에게 템플릿임을 알릴 필요가 없습니다. –

관련 문제