C ++ şablon typedef


368

benim bir sınıfım var

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

Ben bir boyut (N ve 1 ile eşdeğer typedefbir Vector(sütun vektör) oluşturur bir yapmak istiyorum. MatrixBöyle bir şey:

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

Hangi derleme hatası üretir. Aşağıdaki benzer bir şey oluşturur, ancak tam olarak istediğim şeyi değil:

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

Bunun için bir çözüm veya çok pahalı olmayan bir çözüm / en iyi uygulama var mı?

Yanıtlar:


549

C ++ 11 , şablonlara izin veren genelleme olan takma ad bildirimleri ekledi typedef:

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

Tür Vector<3>eşdeğerdir Matrix<3, 1>.


C ++ 03'te en yakın yaklaşım şuydu:

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

Burada tür Vector<3>::typeeşdeğerdir Matrix<3, 1>.


45
Oh harika, ben C ++ 0x bu bölümünü görmemişti ve bir süredir templated typedef hakkında orospu ... sanırım son taslak daha ayrıntılı bir okuma olmalıdır.
Matthieu M.Mayıs

2
Miras kalan yapıcılar OP'nin orijinal çözümünü daha uygulanabilir bir çözüm haline getirecek mi?
StackedCrooked

2
@StackedCrooked: Hedeflerine bağlı. Kompozisyonun ne zaman yapacağı kalıtımdan kaçınırım (ve evet, yapıcıların miras alınması her ikisini de kolaylaştıracaktır), ama aynı zamanda bir typedef'in yapacağı kompozisyondan da kaçınırım.
GManNickG

1
yanlış kullanmıyorsam kullanmak uzmanlığı desteklemez, bu nedenle ikinci seçenek birçok durumda hala yararlıdır.
Utkarsh Bhardwaj
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.