Шаблон C ++ typedef


368

У мене клас

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

Я хочу зробити a, typedefякий створює Vector(вектор стовпця), який еквівалентний a Matrixз розмірами N та 1. Щось таке:

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 ... здогадуюсь, я мав би більш детально прочитати остаточний проект.
Матьє М.

2
Чи зробить успадковані конструктори оригінальне рішення ОП більш життєздатним рішенням?
StackedCrooked

2
@StackedCrooked: Залежить від його цілей. Я уникаю успадкування, коли буде діяти композиція (і так, наслідування конструкторів полегшить це і інше), але я також уникаю композиції, коли буде робитися typedef.
GManNickG

1
використання не підтримує спеціалізацію, якщо я не помиляюся, тому другий варіант все ще корисний у багатьох випадках.
Utkarsh Bhardwaj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.