C ++ 템플릿 typedef


368

수업이 있습니다

template<size_t N, size_t M>
class Matrix {
    // ....
};

크기 N과 1에 해당 typedef하는 Vector(열 벡터) 를 만드는 a 를 만들고 Matrix싶습니다.

typedef Matrix<N,1> Vector<N>;

컴파일 오류가 발생합니다. 다음은 비슷한 것을 만들지 만 정확히 내가 원하는 것은 아닙니다.

template <size_t N>
class Vector: public Matrix<N,1>
{ };

해결책이나 너무 비싸지 않은 해결책 / 모범 사례가 있습니까?

답변:


548

C ++ 11은 별칭 선언을 추가 typedef하여 일반화 되어 템플릿을 허용합니다.

template <size_t N>
using Vector = Matrix<N, 1>;

유형 Vector<3>Matrix<3, 1>입니다.


C ++ 03에서 가장 가까운 근사값은 다음과 같습니다.

template <size_t N>
struct Vector
{
    typedef Matrix<N, 1> type;
};

여기서 유형 Vector<3>::type은와 동일합니다 Matrix<3, 1>.


45
오, 좋아, 나는 C ++ 0x 의이 부분을 보지 못했고 잠시 동안 템플릿 형식의 typedef에 대해 괴로움을 느꼈다.
Matthieu M.

2
상속 생성자가 OP의 원래 솔루션을보다 실용적인 솔루션으로 만들 수 있습니까?
StackedCrooked

2
@StackedCrooked : 그의 목표에 달려 있습니다. 컴포지션이 수행 될 때 상속을 피하십시오 (그렇습니다. 상속 생성자가 두 가지를 더 쉽게 만들 것입니다). 그러나 typedef가 수행 할 때 컴포지션도 피하십시오.
GManNickG

1
내가 잘못하지 않은 경우 using은 전문화를 지원하지 않으므로 두 번째 옵션은 여전히 ​​많은 경우에 유용합니다.
Utkarsh Bhardwaj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.