2010-06-08 4 views
15

이렇게 typedef를 할 필요가 있습니다.부분 템플릿을위한 C++ typedef

template< class A, class B, class C > 
class X 
{ 
}; 

template< class B, class C > 
typedef X< std::vector<B>, B, C > Y; 

방금 ​​C++에서 지원되지 않는 것으로 나타났습니다. 대체 수단을 통해 같은 목표를 달성하는 방법에 대해 조언 해 줄 수 있습니까?

고마워, 고쿨.

+1

의 중복 가능성 (HTTP [템플릿 형식 정의?] : // 유래 .com/questions/649718/templated-typedef) – Troubadour

답변

18

당신은 C++을하는 경우 0X/C++ 1 배 컴파일러, 약간 다른 구문을 허용 할 것이다 (이것은 컴파일러가 아직이 기능을 지원하지 않는 것처럼 보인다) :

template <typename B, typename C> 
using Y = X< std::vector<B>, B, C >; 

을 당신은 (가능하면 피) (피터는 제안 같은) 템플릿 기반 구조체에 동봉 된 유형을 정의 또는 상속을 남용 같은 다른 기술을 사용할 수 있습니다 :

template <typename B, typename C> 
class Y : public X< std::vector<B>, B, C > {}; 
+1

그것은 왜 * * 아직 지원되지 않는지 궁금합니다. 시맨틱,'자동'타이핑, variadic 템플릿 또는 적어도 구현하기 어려운 것 같은 다른 것들을 이동하는 것보다 훨씬 더 어려운가요? 그러나 나는 컴파일러를 만드는 데 많은 경험이 없지만, 어려운 일이 얼마나 길냐에 대한 나의 직관력은 부족합니다. :). – Pieter

+2

표준의 각기 다른 부분이 다른시기에 결정되었다고 생각합니다. 컴파일러 제작자는 개발 표준 시간이 2011 년에 나오기 전에 기능이 변경되지 않는다고 합리적으로 확신해야합니다. 그들의 방출 계획에. – AshleysBrain

+0

나는 미래의 인물이다. 주요 컴파일러에서 지원되는 것 같습니다. – imallett

15

구조체에 넣음으로써. 이 아이디어는 템플릿 별칭이며 C++ 0x 표준 (the proposal)의 일부입니다. 그러나 주위에 작업이 주어진다 :

template<class B, class C> 
struct Y { 
    typedef X<std::vector<B>, B, C> type; 
}; 

하고 원하는 형식으로 Y<B, C>::type를 사용합니다.

gcc4.5 또는 VS2010이 이미 C++ 0x의 큰 하위 집합과 같이 지원한다고 생각할 수도 있지만 실망시켜야합니다. 아직 지원되지 않는 상태입니다.).

+2

이 작업을 수행하려면 'B' 또는'C' 자체가 템플릿 매개 변수라면'typename' 키워드를 사용하십시오. –