Mẫu C ++ typedef


369

Tôi có một lớp học

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

Tôi muốn tạo một typedefcái tạo ra một Vector(vectơ cột) tương đương với a Matrixcó kích thước N và 1. Một cái gì đó tương tự:

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

Mà tạo ra lỗi biên dịch. Sau đây tạo ra một cái gì đó tương tự, nhưng không chính xác những gì tôi muốn:

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

Có một giải pháp hoặc một cách giải quyết không quá tốn kém / thực hành tốt nhất cho nó?

Câu trả lời:


550

C ++ 11 đã thêm các khai báo bí danh , được khái quát hóa typedef, cho phép các mẫu:

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

Loại Vector<3>tương đương với Matrix<3, 1>.


Trong C ++ 03, xấp xỉ gần nhất là:

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

Ở đây, loại Vector<3>::typetương đương với Matrix<3, 1>.


45
Ôi thật tuyệt, tôi đã không thấy phần này của C ++ 0x và tôi đã chê bai về typedef templated trong một thời gian ... đoán tôi nên đọc kỹ hơn bản thảo cuối cùng.
Matthieu M.

2
Các nhà xây dựng kế thừa sẽ làm cho giải pháp ban đầu của OP trở thành giải pháp khả thi hơn?
StackedCrooking

2
@StackedCrooking: Phụ thuộc vào mục tiêu của anh ấy. Tôi tránh kế thừa khi sáng tác sẽ làm (và vâng, kế thừa các hàm tạo sẽ làm cho cả hai điều này dễ dàng hơn), nhưng tôi cũng tránh sáng tác khi một typedef sẽ làm.
GManNickG

1
sử dụng không hỗ trợ chuyên môn hóa nếu tôi không sai, vì vậy tùy chọn thứ hai vẫn hữu ích trong nhiều trường hợp.
Utkarsh Bhardwaj
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.