C ++ шаблон typedef


369

У меня есть класс

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>
{ };

Есть ли решение или не слишком дорогой обходной путь / лучшие практики для него?

Ответы:


550

В 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
Использование не поддерживает специализацию, если я не ошибаюсь, поэтому второй вариант все еще полезен во многих случаях.
Уткарш Бхардвадж
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.