C ++ template typedef


369

saya ada kelas

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

Saya ingin membuat typedefyang membuat Vector(kolom vektor) yang setara dengan Matrixdengan ukuran N dan 1. Sesuatu seperti itu:

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

Yang menghasilkan kesalahan kompilasi. Berikut ini menciptakan sesuatu yang serupa, tetapi tidak persis apa yang saya inginkan:

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

Apakah ada solusi atau solusi / praktik terbaik yang tidak terlalu mahal untuk itu?

Jawaban:


550

C ++ 11 menambahkan deklarasi alias , yang merupakan generalisasi typedef, yang memungkinkan templat:

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

Jenisnya Vector<3>setara dengan Matrix<3, 1>.


Di C ++ 03, perkiraan terdekat adalah:

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

Di sini, jenisnya Vector<3>::typesetara dengan Matrix<3, 1>.


45
Oh, bagus, saya belum pernah melihat bagian dari C ++ 0x ini dan saya sudah mengeluh tentang typedef templated untuk sementara waktu ... kira saya harus membaca draft final lebih teliti.
Matthieu M.

2
Akankah mewarisi konstruktor menjadikan solusi asli OP adalah solusi yang lebih layak?
StackedCrooked

2
@StackedCrooked: Tergantung pada tujuannya. Saya menghindari warisan ketika komposisi akan dilakukan (dan ya, mewarisi konstruktor akan membuat keduanya lebih mudah), tetapi saya juga menghindari komposisi ketika typedef akan melakukannya.
GManNickG

1
menggunakan tidak mendukung spesialisasi jika saya tidak salah, sehingga opsi kedua masih berguna dalam banyak kasus.
Utkarsh Bhardwaj
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.